楼主: 小鳄鱼a
508 11

请看看这个问题 [推广有奖]

11
小鳄鱼a 发表于 2015-12-15 16:04:00 |只看作者 |坛友微信交流群
请问这一步怎样体现的循环呢   

data _null_;
  set all_combinations;  * 上一次生成的;

  call execute("data comb" || strip(_N_) || ";" ||
               "  set test;                   " ||
               "  keep " || zuhe || ";"         ||
               "run;"
              );
run;

使用道具

12
sniperhgy 发表于 2015-12-15 17:53:45 |只看作者 |坛友微信交流群
小鳄鱼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变量的作用。

如果还有不理解的,欢迎继续讨论。^_^

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-10 22:07