全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1668 6
2013-11-06
想通过宏变量来实现渐进滞后,形式如下


复制代码


上述程序实现不了,求助大家问题出在哪儿


附件列表
捕获.JPG

原图尺寸 13.28 KB

捕获.JPG

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-11-6 18:56:08
%macro a;
data test2;
  set a;
  array b{3};
  %do i=1 %to 3;  
    b{&i}=lag&i.(x);
  %end;
run;
%mend;

%a
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-6 20:09:30
Eternal0601 发表于 2013-11-6 18:56
%macro a;
data test2;
  set a;
感谢您的程序!

另外,您能告诉我我的程序错在那里吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-6 20:46:09
wazg 发表于 2013-11-6 20:09
感谢您的程序!

另外,您能告诉我我的程序错在那里吗?
你程序中的  %let ii=0;     %let ii=%eval(&ii.+1);是宏语句,会优先执行,并且只有一次,故每次你实际调用&ii.的值都为1, 但很奇怪的是b2,b3的值不是.,1,2,3,而是1,2,3,4,静等高手解释。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-6 20:58:48
Eternal0601 发表于 2013-11-6 20:46
你程序中的  %let ii=0;     %let ii=%eval(&ii.+1);是宏语句,会优先执行,并且只有一次,故每次你实际调用 ...
楼主你的程序基本就是test2这段,很奇怪的是,下面两段程序结果是不同的,哈哈
data test1;
  set a;
  b1=lag(x);
  b2=lag(x);
  b3=lag(x);
run;

data test2;
  set a;
  array b{3};
  do i=1 to 3;
          b(i)=lag(x);
  end;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-6 21:02:51
Eternal0601 发表于 2013-11-6 20:46
你程序中的  %let ii=0;     %let ii=%eval(&ii.+1);是宏语句,会优先执行,并且只有一次,故每次你实际调用 ...
是不是说,%let ii=%eval(&ii.+1) 定义的ii=1仅在每一次循环内有效,下一次循环前又回到了外部%let ii=0
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群