在SAS中努力传递宏值

在SAS中努力传递宏值,sas,sas-macro,Sas,Sas Macro,最初,我有这样的代码 data newFile; set File; If Gender NE 'Female' then delete; If Group NE 10 then delete; If Age GT 30 then delete; run; 它很好用。但我希望能够从顶部更改这些条件,因此我添加了宏变量。到目前为止,我有这个 &let macGender = 'Female'; &let macGroup = 10; &let macAg

最初,我有这样的代码

data newFile;
set File;
   If Gender NE 'Female' then delete;
   If Group NE 10 then delete;
   If Age GT 30 then delete;
run;
它很好用。但我希望能够从顶部更改这些条件,因此我添加了宏变量。到目前为止,我有这个

&let macGender = 'Female';
&let macGroup = 10;
&let macAge = 30;

data newFile;
set File;
   If Gender NE &macGender then delete;
   If Group NE &macGroup then delete;
   If Age GT &macAge then delete;    
run;

它似乎不像原始代码那样工作。我甚至试过这样的东西

你想要
%let
而不是
&let

%let
是用于为宏变量赋值的宏语句


&let
是对您(可能)尚未创建的宏变量的引用。

您想要的是
%let
而不是
&let

%let
是用于为宏变量赋值的宏语句


&let
是对您(可能)尚未创建的宏变量的引用。

将%符号放在let语句的前面而不是前面,并在宏声明中去掉围绕女性的引号

将这些引号放在实际宏的周围

比如说

%让性别=女性


如果性别NE“&macGender.”则删除

在let语句前面加上%的符号,而不是(&p),并在宏声明中去掉围绕女性的引号

将这些引号放在实际宏的周围

比如说

%让性别=女性


如果性别NE“&macGender.”则删除

也许您可以添加一个简短的解释,说明为什么您不认为引号应该包含在宏变量赋值中。由于宏变量只包含文本,并且在这里用于在评估之前修改数据步骤代码,因此两种方法的工作原理相同。我同意不在变量中加引号,但也同意SRSwift的观点,即您应该解释为什么这是一个好主意。此外,同样值得解释一下使用双引号的好处。也许你可以添加一个简短的解释,说明为什么你认为不应该在宏变量赋值中包含引号。由于宏变量只包含文本,并且在这里用于在评估之前修改数据步骤代码,因此两种方法的工作原理相同。我同意不在变量中加引号,但也同意SRSwift的观点,即您应该解释为什么这是一个好主意。此外,同样值得解释一下使用双引号的好处。有趣的是,如果你正确地创建了双引号,它可以与&let一起使用<代码>%let let=%nrstr(%let);%取消报价(&let)let2=3;%put&let2不太实用,但很有趣!有趣的是,如果您确实正确地创建了它,它可以与&let一起工作<代码>%let let=%nrstr(%let);%取消报价(&let)let2=3;%put&let2不太实用,但很有趣!