理解SET 循環機制 --對應123 題 -base Q87 :
- set 為隱式循環,整個data 步讀取set 數據集,直到set 數據集讀取完畢后 data 步自動停止執行,讀至run 語句后清空pdv(retain 除外),data 步中,沒有output 輸出時,于run 語句時執行output 到默認數據集當中。
- set 在每個data步/do 循環中,讀取一條數據(每次循環數據指針下移至下個觀測),也就是說,一條set 的執行對應且僅對應一條觀測,且觀測唯一。
原題:(set 至于do 循環中)
The SAS data set BANKS is listed below:
BANKS
name rate
FirstCapital0.0718
DirectBank0.0721
VirtualDirect0.0728
The following SAS program is submitted:
data newbank;
do year = 1 to 3;
set banks;
capital + 5000;
end;
run;
- 其輸出僅有一條obs , 對應四個variable :
year name rate capital
4 VirtualDirect 0.0728 15000
程序在第三條obs讀取完結束。Do 語句中 默認結束year =year+1,year=4 ; "+" 默認在data(implicit loop) 和Do中(explicit loop中)保持pdv中的值。
考慮以下變形:
test_db.test1.png
data aa;
do year = 1 to 3;
set test_db.test1;
capital + 5000;
put @5"inloop:" _all_;
end;
put @1"data: outloop"_all_;
run;
-
結果如下(使用Put 輸出到日志)
log.png
-
數據集:
dataset aa.png
其中只有第 3, 6 條obs 順利輸出!,year =4 !