我无法使用SAS在数据步骤中使用宏创建变量

我无法使用SAS在数据步骤中使用宏创建变量,sas,sas-macro,Sas,Sas Macro,如果条件不起作用,但正常条件起作用,但不需要正常条件,则执行上述数据步骤宏。 希望仅使用宏条件。请帮帮我 谢谢你…很难说你想做什么。但要开发宏,首先需要从使用SAS代码开始。也许是这样的: data freq;; input placebo ; cards; 3 ; Run; data freqt; set freq; %macro freq1 (arm=,pct=,result=); %if &arm ne .

如果条件不起作用,但正常条件起作用,但不需要正常条件,则执行上述数据步骤宏。 希望仅使用宏条件。请帮帮我


谢谢你…

很难说你想做什么。但要开发宏,首先需要从使用SAS代码开始。也许是这样的:

data freq;;
    input placebo ;
    cards;
3
    ;
Run;


data freqt;
    set freq;
        %macro freq1 (arm=,pct=,result=);
            %if &arm ne . %then &pct=&arm*100;
        %if &pct ne .  %then %do;
            %if &pct le 10 %then &result = "test";
        %end;
        %mend freq1;
        %freq1(arm=placebo,pct=pct_pla,result=placebo_);
run;

很难说你想做什么。但要开发宏,首先需要从使用SAS代码开始。也许是这样的:

data freq;;
    input placebo ;
    cards;
3
    ;
Run;


data freqt;
    set freq;
        %macro freq1 (arm=,pct=,result=);
            %if &arm ne . %then &pct=&arm*100;
        %if &pct ne .  %then %do;
            %if &pct le 10 %then &result = "test";
        %end;
        %mend freq1;
        %freq1(arm=placebo,pct=pct_pla,result=placebo_);
run;

您混淆了宏语法和数据步骤语法。在宏语法中,只能引用宏变量的内容,而不能引用数据步长变量。因此,如果
&arm
包含变量名
安慰剂
,那么您的病情

data freqt;
  set freq;
  %freq(placebo)
  %freq(drug1)
  %freq(drug2)
run;
测试文本
安慰剂
是否等于
。当然不是,所以这总是错误的

然而,这是可行的:

%if &arm ne . %then ...
因为现在您正在编写数据步骤语法,它允许您访问数据步骤变量
sparbo
。现在您将
3
(或其中的任何内容)进行比较


你还有一些其他的问题;宏定义不应该在数据步骤中(可以把它放在那里,但这样做有点胡说八道),当然你的
pct
逻辑也有同样的问题。

你把宏语法和数据步骤语法搞混了。在宏语法中,只能引用宏变量的内容,而不能引用数据步长变量。因此,如果
&arm
包含变量名
安慰剂
,那么您的病情

data freqt;
  set freq;
  %freq(placebo)
  %freq(drug1)
  %freq(drug2)
run;
测试文本
安慰剂
是否等于
。当然不是,所以这总是错误的

然而,这是可行的:

%if &arm ne . %then ...
因为现在您正在编写数据步骤语法,它允许您访问数据步骤变量
sparbo
。现在您将
3
(或其中的任何内容)进行比较


你还有一些其他的问题;宏定义不应该在数据步骤中(可以将其放在那里,但这样做有点胡说八道),当然您的
pct
逻辑也有同样的问题。

使用
options mprint mlogic运行代码选项mprint mlogic运行代码if &arm ne . then ...