我不知道有什么区别
%let m=product 和 cal symput('m', 'product') 是?
不是两个表达式都创建了具有值乘积的 af 宏变量 m 吗?
我不知道有什么区别
%let m=product 和 cal symput('m', 'product') 是?
不是两个表达式都创建了具有值乘积的 af 宏变量 m 吗?
%let
用于定义基于文本或解析为文本的表达式的宏变量。它在开放代码或宏中调用。 %let
自动修剪前导和尾随空白的宏变量。文档可以在这里找到。
call symput
(此处的文档)用于分配 SAS 数据集变量、解析为 SAS 数据集变量(或 PDV 变量)的表达式、字符值或解析为字符值(包括数值, 它以默认格式解析为其等效字符,通常为 BEST12。)。 call symput
不修剪前导或尾随空格,例如表达式
%let x=5;
%put [&x];
给你一个与表达式有些不同的结果
data _null_;
call symput('y',5);
run;
%put [&y];
call symputx
(从 9.2 开始可用)与 具有更相似的结果%let
,因为它会修剪前导和尾随空白。这对于从数字创建的宏变量特别有用,因为这些变量通常有几个前导空格,就像上面的例子一样。
%let
并且call symput\symputx
在范围界定上也有一些差异。在开放代码(或不在宏中的数据步骤)中使用时,都将宏变量放在全局表中,但%let
在宏中使用时,会将变量放在它已经存在的最局部表中,如果有的话;即,如果您有一个global
变量,&myvar
那么%let myvar=5;
将修改全局变量&myvar
,而不是创建一个局部范围的变量。 call symput
将变量放在最局部的非空符号表中,无论它是否已经存在于全局范围内。 call symputx
将执行相同的操作,除非您指定一个可选参数来指示您希望放置哪个表。
唯一的区别是调用%LET
or的方法call symput
。
%LET
在开放代码中使用,而不是在数据步或过程中使用。
call symput
在数据步内使用,而不是在开放代码中使用。
%let 是一个宏语句,您可以在开放代码或宏内部使用。呼叫症状只能在 DATA 步中使用,不能在开放代码中使用。请注意,此 DATA 步可能在宏中。
至于创建的变量的作用域,请看: