Variables 通过%let定义SAS宏变量和调用symput之间的差异?
我不知道两者之间有什么区别 %设m=乘积和 cal symput(‘m’、‘产品’)是什么Variables 通过%let定义SAS宏变量和调用symput之间的差异?,variables,macros,sas,definition,Variables,Macros,Sas,Definition,我不知道两者之间有什么区别 %设m=乘积和 cal symput(‘m’、‘产品’)是什么 这两个表达式不是都在创建具有值乘积的af宏变量m吗?唯一的区别是调用%LET或调用symput的方法 %LET在开放代码中使用,而不是在数据步骤或过程中使用 call symput在数据步骤中使用,而不是在开放代码中使用。%let用于基于文本或解析为文本的表达式定义宏变量。它在开放代码或宏中调用%let自动修剪前导空格和尾随空格的宏变量。可以找到文档 调用symput(文档)用于分配SAS数据集变量、解析
这两个表达式不是都在创建具有值乘积的af宏变量m吗?唯一的区别是调用
%LET
或调用symput
的方法
%LET
在开放代码中使用,而不是在数据步骤或过程中使用
call symput
在数据步骤中使用,而不是在开放代码中使用。%let
用于基于文本或解析为文本的表达式定义宏变量。它在开放代码或宏中调用<代码>%let自动修剪前导空格和尾随空格的宏变量。可以找到文档
调用symput
(文档)用于分配SAS数据集变量、解析为SAS数据集变量(或PDV变量)的表达式、字符值或解析为字符值的表达式的内容(包括一个数值,该数值以默认格式解析为其等效字符,通常为BEST12)。call symput
不修剪前导空格或尾随空格,例如表达式
%let x=5;
%put [&x];
data _null_;
call symput('y',5);
run;
%put [&y];
给出与表达式稍有不同的结果
%let x=5;
%put [&x];
data _null_;
call symput('y',5);
run;
%put [&y];
call symputx
(从9.2开始提供)与%let
的结果更相似,因为它修剪前导空格和尾随空格。这对从数字创建的宏变量特别有用,因为这些变量通常有几个前导空格,如上例所示
%let
和调用symput\symputx
在作用域上也有一些不同。在开放代码中使用这两种方法(或在非宏中使用数据步骤时)将宏变量放置在全局表中,但宏中使用的%let
将变量放置在它已经存在的最局部的表中,如果它存在;即,如果您有一个全局变量&myvar
,则%let myvar=5;
将修改全局变量&myvar
,而不是创建一个局部变量oped变量。call symput
将把变量放在最局部的非空符号表中,而不管它是否已经存在于全局范围中。call symputx
也会这样做,除非您指定一个可选参数来指示希望放在哪个表中。%let是一个宏语句,您可以n在开放代码或宏中使用。调用症状只能在数据步骤中使用,不能在开放代码中使用。请注意,此数据步骤可能在宏中
关于所创建变量的范围,请参见:
谢谢你的解释,乔。我做了测试。很好。再次感谢你的知识。