chenys625 发表于 2013-1-29 20:06 
请问:是do until end全部执行完,然后才开始执行下一个do么?
如下这样写的程序错在哪里?
data test; ...
请问:是do until end全部执行完,然后才开始执行下一个do么?
是的。语句是顺序执行的。
前面的do-until-end语句是用来得到每一个ID的所有Y的值,并生成新的变量。
后面的do-until-end是读取该ID的每一条记录并且输出(output),这样上一步所得到的X0_Y, X1_Y, X2_Y就一并输出了。
如下这样写的程序错在哪里?
这样写的话,前一个do-until-end得到了每一个ID的X0_Y, X1_Y, X2_Y,而后面的部分只是读取一条记录,而不是一个ID的所有记录。具体来说:
_N_=1:
a. do-until-end 语句块能得到ID=1时的X0_Y, X1_Y, X2_Y
b. 后面的SET语句取出test第一条记录,然后输出。
_N_=2:
a. do-until-end 语句块能得到
ID=2时的X0_Y, X1_Y, X2_Y
b. 后面的SET语句取出test第二条记录,,然后输出。此时取出的记录仍是ID=1,而X0_Y, X1_Y, X2_Y 却是ID=2时的Y值。
_N_=3 情况与_N_=2相似。
_N_=4:
do-until-end语句会试图读取下一个ID的记录,由于test只有3个ID,所以没有可读的数据,整个DATA步就此(SET语句)结束。