全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3351 17
2015-03-10
各位高手,

        我的原始数据里包含很多天的信息,我写了一个macro用来把每一天的数据拿出来进行计算:
        %let inputdata=original;
        %macro Cal (inputdate=,date=);                                                                                                         
         data split_&date;                                                                                                                        
         set &inputdata;                                                                                                                     
         if date=&inputdate then output split_&date;                                                                                             
run;  
%mend;

%Cal (inputdate='10Jun2010'd,date=10Jun2010);                                                                                          
%Cal (inputdate='11Jun2010'd,date=11Jun2010);                                                                                          
%Cal (inputdate='12Jun2010'd,date=12Jun2010);                                                                                          
%Cal (inputdate='13Jun2010'd,date=13Jun2010);                                                                                          
%Cal (inputdate='14Jun2010'd,date=14Jun2010);                                                                                          
%Cal (inputdate='15Jun2010'd,date=15Jun2010);                                                                                          
%Cal (inputdate='16Jun2010'd,date=16Jun2010);                                                                                          
.......
%Cal (inputdate='15Apr2014'd,date=15Apr2014);     

但是由于有几年的数据,如果用以上方式调用macro需要把几年当中的每一天都列出来。我想用一个do loop来实现这一步,比方说用:do i=‘10Jun2010’d to ‘15Apr2014’d。。。。但是不知道怎样可以实现?恳请高手指点一下,谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2015-3-10 15:17:57
data有按日期排序嗎?
有的話很好做
二维码

扫码加我 拉你入群

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

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

2015-3-10 15:32:27
jasonmo 发表于 2015-3-10 15:17
data有按日期排序嗎?
有的話很好做
data是按日期排好顺序的,请教高手怎么实现这个啊。。。。多谢!
二维码

扫码加我 拉你入群

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

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

2015-3-10 15:43:29
yuanyang0927 发表于 2015-3-10 15:32
data是按日期排好顺序的,请教高手怎么实现这个啊。。。。多谢!
我试了用类似这样的程序:
%macro daily(date_begin,date_end);                                                                                                   
  %let i="&date_begin."d;                                                                                                               
  %let j="&date_end."d;                                                                                                                        %do k= &i %to &j;                                                                                                                     
    %Cal(inputdate=k, date=k);                                                                                                         
  %end;                                                                                                                                 
%mend;                                                                                                                                 
%daily(10jan2010,11jan2010);  
但是log提示
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: &i
ERROR: %FROM 值(%DO K 循环中)无效。
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: &j
ERROR: %TO 值(%DO K 循环中)无效。
ERROR: 宏 DAILY 将终止执行。

急死了,请问有什么办法可以解决啊?
二维码

扫码加我 拉你入群

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

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

2015-3-10 20:20:54
data _null_;
   do dt= '10Jun2010'd to '15Apr2014'd;
      dtc=put(dt,date9.);
          code=cats('%Cal(inputdate=',dt,',date=',dtc,')');
          call execute(code);
   end;
run;
二维码

扫码加我 拉你入群

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

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

2015-3-11 10:08:14
pobel 发表于 2015-3-10 20:20
data _null_;
   do dt= '10Jun2010'd to '15Apr2014'd;
      dtc=put(dt,date9.);
试过,程序可以运行!谢谢牛人,程序非常巧妙而且简练!

有几个关于这行程序的问题:
code=cats('%Cal(inputdate=',dt,',date=',dtc,')');

1) cats函数的用途是否只是将后面的程序变成字符串形式,以备call execute使用?
2) 为什么dt和dtc都要放在单引号里,并且前后加逗号呢?我试了把这些符号去掉,确实这两个变量都不能被resolve了。

非常感谢!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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