我正在学习使用double set语句的技巧并在以下代码中遇到麻烦:
数据测试1;我i = 1到2; 设置sashelp.class;结束;跑;
数据测试2; 设置sashelp.class; 设定……
SAS output 语句将观察结果写入输出数据集。没有明确的时候 output 使用语句(如在数据步骤中)隐式 output 在数据步骤结束时,将当前观察结果输出到输出数据集。
output
在你的第一个数据步骤中 do 循环导致 set 声明要执行两次,第一次读取obs#1,第二次读取obs#2。循环结束,下一个语句是 run ,所以隐含 output 输出当前观察结果#2。数据步骤的下一次迭代会导致 do 循环读取obs#3然后#4,所以输出最后一个obs(#4),依此类推,直到数据集结束。
do
set
run
第二个数据步骤执行第一个 set 语句在obs#1中读取,然后执行第二个 set 语句,从输入数据集读取obs#1, 的 覆盖 强> 目前的观察。隐含的 output 导致这个障碍被写出来。数据步骤重申导致阻塞#2发生同样的情况,依此类推,直到读取并输出所有19个obs。
插入一些诊断信息有助于了解发生的情况,例如提交以下内容并检查日志:
data test1; do i = 1 to 2; set sashelp.class; putlog 'In loop: ' i= name=; end; putlog 'About to output: ' name=; run;