If statement 如何放置&&;var&;我进入了if状态

If statement 如何放置&&;var&;我进入了if状态,if-statement,macros,sas,If Statement,Macros,Sas,我想创建一个数据集sasdata.newlist&I,当第I个限制 是和&restri&i(例如:gender='M'和state='CA')。 在这个新创建的数据集中,我只需要满足限制的观察值&&restri&I* 虽然sasdata.newlist2包含sasdata.oldlist中的所有数据,但if条件不起作用。有人能帮我解决这个问题吗? 您没有在正确的上下文中解析宏变量。应用限制代码时,请解析该代码,以便将其作为数据步骤的一部分进行编译(数据步骤) %Macro testing(I);

我想创建一个数据集
sasdata.newlist&I
,当第I个限制 是
和&restri&i
(例如:
gender='M'
state='CA'
)。 在这个新创建的数据集中,我只需要满足限制的观察值
&&restri&I*

虽然sasdata.newlist2包含sasdata.oldlist中的所有数据,但if条件不起作用。有人能帮我解决这个问题吗?


您没有在正确的上下文中解析宏变量。应用限制代码时,请解析该代码,以便将其作为数据步骤的一部分进行编译(数据步骤)

%Macro testing(I);
 data sasdata.newlist&i;
 set sasdata.oldlist;
 %if &&restri&i %then; 
 run;
%mend testing;
%testing(2)

虽然很难判断何时使用宏语句,但何时不使用宏语句

例如:我是否需要在下面的代码中的if-then-else语句和Do-while语句中添加%呢?顺便问一下,我可以像这样使用“Doi=1到n while(condition)”语句吗

%Macro testing(I);
 data sasdata.newlist&i;
 set sasdata.oldlist;

 /* %if &&restri&i %then;  NO-no-no, incorrect context */

 * apply ith restriction as a sub-setting IF statement;
 if &&restri&i;

 run;
%mend testing;
%testing(2)

这不是一个答案,而是一个后续问题。您可以编辑原始问题以获得此示例,也可以作为单独的问题提问。
%Macro testing(I);
 data sasdata.newlist&i;
 set sasdata.oldlist;

 /* %if &&restri&i %then;  NO-no-no, incorrect context */

 * apply ith restriction as a sub-setting IF statement;
 if &&restri&i;

 run;
%mend testing;
%testing(2)
%MACRO FUNDSOURCE(I);
DATA SASDATA.STUDENT&I; 
SET SASDATA.STUDENTLIST 
DO M = 1 TO 310  WHILE(&&BUDG&I > 0); /*loop through all observations_ALL 
      STUDENTS*/
 IF &&BUDG&I LE 3000- FA_TOT1  THEN do;
      DISBURSE = &&BUDG&I;
      FA_TOT1+DISBURE;
     &&BUDG&I - DISBURSE;
 end;
 ELSE IF &&BUDG&I GT (3000- FA_TOT1)  THEN DO;
    DISBURSE = 3000-FA_TOT1;
    FA_TOT1+DISBURSE;
    &&BUDG&I - DISBURSE;
 END;
 END;
IF _n_ > M THEN DELETE; /*if budget are all gone, delete other observations, 
       keep observations only for the student who get funds*/
RUN;
%MEND FUNDSOURCE;