Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 通过%let定义SAS宏变量和调用symput之间的差异?_Variables_Macros_Sas_Definition - Fatal编程技术网

Variables 通过%let定义SAS宏变量和调用symput之间的差异?

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数据集变量、解析

我不知道两者之间有什么区别

%设m=乘积和 cal symput(‘m’、‘产品’)是什么


这两个表达式不是都在创建具有值乘积的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在开放代码或宏中使用。调用症状只能在数据步骤中使用,不能在开放代码中使用。请注意,此数据步骤可能在宏中

关于所创建变量的范围,请参见:


谢谢你的解释,乔。我做了测试。很好。再次感谢你的知识。