如何在SAS宏中使用“AND”运算符?

问题描述 投票:0回答:1

我最近编写了一个宏来轻松创建多个“Proc freqs”,只需输入变量和条件“where”(如果有的话)。 它通常有效,但当我的条件“where”包含“AND”时,我仍然在努力使其工作。

这是宏:

options mprint minoperator;

%macro check(var1=,var2=,var3=, cond=);

Proc freq data= &dataset_full.; 
Table &var1.
    %if &var2. NE %str() %then 
     * &var2. ;
    %if &var3. NE %str()  %then 
    * &var3. ;
    / out="&var1. &var2. &var3." norow nocol nopercent;
    %if &cond. NE %str() %then
    &cond.;
    ;
Run;

%mend;

例如,我可以写

%check(var1=age,var2=weight, cond=where age=1 and weight=10)
。 不会有错误,它只是不会将我的条件应用于输出。根据 MPRINT 输出,“cond”就像是空的。 相反,如果我的条件包含“OR”,则效果很好。

我尝试过使用 str(), %eval 但不起作用。

sas macros logical-operators proc logical-and
1个回答
0
投票

2分

  1. 您可能应该对 Tables 语句上的 out= 选项进行一些操作。您必须指定 SAS 数据集名称(不在“”中)。我猜你想在名称中指定你的输入变量。请参阅下面的代码。

  2. 当使用 %Str 宏函数

    屏蔽 cond= 值时,下面的代码有效

    选项 mprint 小运算符;

    %宏检查(var1=,var2=,var3=, cond=);

    过程频率数据= &dataset_full.;表&var1。 %如果&var2。 NE %str() %然后 * &var2。 ; %如果&var3。 NE %str() %然后 * &var3。 ; /out=freq_&var1.&var2.&var3。诺罗诺科尔诺珀森特; %如果&条件。 NE %str() %然后 &条件。; ;运行;

    %修复;

    %let dataset_full = sashelp.class;

    %check(var1=年龄,var2=体重,cond=其中年龄=1且体重=10);

© www.soinside.com 2019 - 2024. All rights reserved.