l*********l 发帖数: 2371 | 1 %macro run_code;
*%let start=%sysfunc(inputn('01feb09'd,anydtdte9.));
*%let end=%sysfunc(inputn('01jun13',anydtdte9.));
%let start=%sysfunc(inputn('01dec11'd,anydtdte9.)); %put &start;
%let end=%sysfunc(inputn('01feb12'd,anydtdte9.));
/*determines the number of months between the two dates*/
%let dif=%sysfunc(intck(month,&start,&end));
%do i=0 %to &dif;
%let date =%sysfunc(putn(%sysfunc(intnx(month,&start,&i,b)),yymmn6.)
);
%let date2=%sysfunc(putn(%sysfunc(intnx(month,&start,&i,b)),mmyyn4.)
);
%let date3=%sysfunc(putn(%sysfunc(intnx(month,&start,&i,b)),yymmn6.)
);
%if &i=0 %then %do; %put "where";%put &date. &date2. &date3.;
%loss_set(date=&date., date2=&date2., date3=&date3.);
%end;
%else %do; %put "not 0";
%loss_set(date=&date., date2=&date2., date3=&date3.);
%end;
%end;
%mend;
%run_code;
macro %loss_set won't run for when i=0, but will run for when i^=0.... i don
't need a work around, i want to know if this is a sas programming RULE not
to start loop with 0, which i didnot think so, but give the fact this don't
work, i am starting to doubt myself.
any inputs?? thanks, | h******s 发帖数: 3420 | 2 &i 是个啥东东?如果 I=0 , &0?
你确信这个对I ne 0 能 work?
.)
【在 l*********l 的大作中提到】 : %macro run_code; : *%let start=%sysfunc(inputn('01feb09'd,anydtdte9.)); : *%let end=%sysfunc(inputn('01jun13',anydtdte9.)); : %let start=%sysfunc(inputn('01dec11'd,anydtdte9.)); %put &start; : %let end=%sysfunc(inputn('01feb12'd,anydtdte9.)); : /*determines the number of months between the two dates*/ : %let dif=%sysfunc(intck(month,&start,&end)); : %do i=0 %to &dif; : %let date =%sysfunc(putn(%sysfunc(intnx(month,&start,&i,b)),yymmn6.) : );
| l*********l 发帖数: 2371 | 3 %do i=0 %to &dif;
this is where macro variable I is defined. and it starts with 0.
【在 h******s 的大作中提到】 : &i 是个啥东东?如果 I=0 , &0? : 你确信这个对I ne 0 能 work? : : .)
| h******s 发帖数: 3420 | 4 我我我。。。
这是 do loop 好吧,macro 不是这样define 的好吧, 我觉得应该直接用 I 而不是&i
【在 l*********l 的大作中提到】 : %do i=0 %to &dif; : this is where macro variable I is defined. and it starts with 0.
| k*******a 发帖数: 772 | 5 如果只想知道有没有这个RULE,何不自己写个简单的测试程序验证一下 | s******0 发帖数: 1269 | 6 那个pharm不是号称很牛嘛。你可以去问问他,让他帮你debugy | d********i 发帖数: 193 | 7 Change the following lines:
*%let start=%sysfunc(inputn('01feb09'd,anydtdte9.));
*%let end=%sysfunc(inputn('01jun13',anydtdte9.));
to:
%*let start=%sysfunc(inputn('01feb09'd,anydtdte9.));
%*let end=%sysfunc(inputn('01jun13',anydtdte9.)); | s*******e 发帖数: 1385 | 8 &i=0的时候你的put statement是work的,应该是macro %loss_set的问题!你可以直接
试试
%loss_set(date=201112, date2=1211, date3=201112)是不是work。
.)
【在 l*********l 的大作中提到】 : %macro run_code; : *%let start=%sysfunc(inputn('01feb09'd,anydtdte9.)); : *%let end=%sysfunc(inputn('01jun13',anydtdte9.)); : %let start=%sysfunc(inputn('01dec11'd,anydtdte9.)); %put &start; : %let end=%sysfunc(inputn('01feb12'd,anydtdte9.)); : /*determines the number of months between the two dates*/ : %let dif=%sysfunc(intck(month,&start,&end)); : %do i=0 %to &dif; : %let date =%sysfunc(putn(%sysfunc(intnx(month,&start,&i,b)),yymmn6.) : );
| P****D 发帖数: 11146 | 9 我觉得他这样写了之后,无形中又定义了一个macro variable i,然后这个跟前面那个
i不是同一个。这里应该是直接用i吧,不过我手边没有电脑可测试。
【在 h******s 的大作中提到】 : &i 是个啥东东?如果 I=0 , &0? : 你确信这个对I ne 0 能 work? : : .)
| P****D 发帖数: 11146 | 10 妾特别讨厌SAS这一点,macro variable都是字符变量。字符变量就有长度和空格的问
题。
你把这个条件改成input(&i, best12.)=0,结果如何?
【在 l*********l 的大作中提到】 : %do i=0 %to &dif; : this is where macro variable I is defined. and it starts with 0.
|
|