理解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.pngdata 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 !
网友评论