【发布时间】:2013-06-18 06:16:09
【问题描述】:
不知道有什么区别
%let m=产品和 cal symput('m', 'product') 是?
不是两个表达式都创建了一个具有值乘积的宏变量 m 吗?
【问题讨论】:
标签: variables macros sas definition
不知道有什么区别
%let m=产品和 cal symput('m', 'product') 是?
不是两个表达式都创建了一个具有值乘积的宏变量 m 吗?
【问题讨论】:
标签: variables macros sas definition
%let 是一个宏语句,您可以在开放代码或宏内部使用它。呼叫症状只能在 DATA 步中使用,不能在开放代码中使用。请注意,此 DATA 步可能在宏中。
至于创建的变量的作用域,请看:
【讨论】:
%let 用于定义基于文本的宏变量或解析为文本的表达式。它在开放代码或宏中调用。 %let 自动修剪前导和尾随空白的宏变量。可以在here 找到文档。
call symput(文档here)用于分配 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 或call symput 的方法。
%LET 用于开放代码中,而不是在数据步或过程中。
call symput 在数据步中使用,而不是在开放代码中。
【讨论】: