| 
 | 
楼主
 
 
 楼主 |
发表于 2012-7-16 22:48:32
|
只看该作者
 
 
 
紧急求助,编译器不一致引起的问题!
在数据集ads中存放两个变量,一个是日期date,另一个是num. 
是想计算针对每个和它的滞后一段时间的日期之间,对应的num的观测,计算平均值。 
但是在计算滞后日期时,出了问题,curDate=date[i,1]是把当前(即date的第i个观测对应的日期) 
赋值给curDate, %let lagDate= %sysfunc(intnx('day',curDate,-&width))是计算当前的滞后日期。 
但是由于宏编译器是先执行的,此时curDate并没有被赋值,所以出错了。 
怎样才能让他顺利执行呢? 
 
各位高手有没有别的方式来做呢?恳请各位给予指点。 
 
[code:2rqu1a7k] 
 
data ads; 
do i=1988 to 2012; 
   do j=1 to 12; 
      date=mdy(j,1,i); 
          num=i*j; 
          output; 
   end; 
end; 
format date yymmdd10.; 
keep date num; 
run; 
 
%let width=20; 
 
%macro tt; 
 
proc iml; 
 
use ads; 
read all into date; 
close ads; 
 
nrw=nrow(date); 
 
datemx=date[,1]; 
nummx=date[,2]; 
firstdate=date[1,1]; 
lastdate=date[nrw,1]; 
 
do i=1 to nrw; 
   curDate=date[i,1]; 
   %let lagDate= %sysfunc(intnx('day',curDate,-&width)); 
    
   dateloc=loc(&lagDate<=datemx & datemx<=curDate); 
   numselect=nummx[dateloc]; 
   nummean=numselect[:,1]; 
 
end; 
quit; 
 
%mend tt; 
%tt; 
[/code:2rqu1a7k] |   
 
 
 
 |