小鳄鱼a 发表于 2015-12-15 16:04
请问这一步怎样体现的循环呢
data _null_;
set这个语句有一个“隐式循环”的特性,一旦用上set,从firstobs开始读取,直到obs结束,如果不指定,那么firstobs=1,obs=最大行数。楼主如果试过代码的话,会发现生成了42个数据集,从comb1到comb42,那么语句中,就是利用_N_来实现的:
1) data _null_ : 这一句,告诉sas不生成数据集,只在内存中执行一些操作
2) set all_combinations : 开始读取all_combinations,没有指定firstobs和obs,那么就是从第一条读到最后一条,这个过程就是“隐式循环”
3) call execute(...) : 向input stack中提交一些语句,因为all_combinations有42行,所以提交了42个数据部。
a) "data comb" || strip(_N_) || ";"就得到了comb1 ~ comb42; "
b) set test; " 的话,因为要从test来生成数据集,所以要读取它 ;
c) " keep " || zuhe || ";" 其中keep是字符串,zuhe是个变量,内容来自all_combinations,向input stack提交之前,内容会被解析出来和“keep ”拼接起来,也就达到了keep变量的作用。
如果还有不理解的,欢迎继续讨论。^_^