全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1300 5
2019-07-02
下面程序中,如何让startDate和stopDate变成数字,以便循环?谢谢了!

%macro Main;
%let startDate='15Jul2000'd;
%let stopDate='19Jul2000'd;
%let numOfDays=120;
%do date=?startDate %to ?stopDate;
  proc sql;
   create table nb.date_line as
    select *
    from nb.raw_date_line   
    where "&date"d-&numOfDays<date<="&date"d;
  quit;
%end;
%mend;
%Main





二维码

扫码加我 拉你入群

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

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

全部回复
2019-7-3 23:02:38
在循环开始用 call symput定义。一步到位也可以不过这样可读性更高和更易于修改

%macro Main;
%let startDate='15Jul2000'd;
%let stopDate='19Jul2000'd;

data _null_;
call symput('start','15Jul2000'd);
call symput('end','19Jul2000'd);
run;


%let numOfDays=120;
%do date= &start. %to &end.;
  proc sql;
   create table nb.date_line as
    select *
    from nb.raw_date_line   
    where "&date"d-&numOfDays<date<="&date"d;
  quit;
%end;
%mend;
%Main
二维码

扫码加我 拉你入群

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

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

2019-7-3 23:19:31
想一步到位试试下面这样
%macro a;

%do i= %sysfunc(putn("15Jul2000"d,best12.)) %to %sysfunc(putn("19Jul2000"d,best12.));
%put %sysfunc(putn(&i.,date9.));
%end;

%mend;

%a;
但是你用这种方式写的代码,别人维护或者读以来会不那么易懂
二维码

扫码加我 拉你入群

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

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

2019-7-4 14:19:03
banishurface 发表于 2019-7-3 23:19
想一步到位试试下面这样
%macro a;
感谢高手回复。
但是,第一个程序,两个变量需要分别修改2次。
第二个程序,两个变量没有独立出来,以后修改还要去先定位。

请问有没有办法像我主贴那样,只需要在独立的%let语句里面修改一次?
谢谢!
二维码

扫码加我 拉你入群

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

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

2019-7-4 22:16:47
/*方法一*/
%let start=15Jul2000;
%let stop=19Jul2000;
%macro Main;

%do i= %sysfunc(putn("&start."d,best12.)) %to %sysfunc(putn("&stop."d,best12.));
%put %sysfunc(putn(&i.,date9.));
%end;

%mend;
%Main



/*方法二*/
%macro a(start=,end=);

%do i= %sysfunc(putn("&start."d,best12.)) %to %sysfunc(putn("&end."d,best12.));
%put %sysfunc(putn(&i.,date9.));
%end;

%mend;

%a(start=15Jul2000,end=19Jul2000);

二维码

扫码加我 拉你入群

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

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

2019-7-4 23:51:11

非常感谢楼上的高手!

%macro Main;
%let startDate='15Jul2000'd;
%let stopDate='19Jul2000'd;
%let numOfDays=120;
%do date=%sysfunc(putn(&startDate,best5.)) %to %sysfunc(putn(&stopDate,best5.));
  proc sql;
   create table nb.date_line as
    select *
    from nb.raw_date_line   
    where &date-&numOfDays<date<=&date;
  quit;
%end;
%mend;
%Main
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

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