SAS中文论坛

标题: 关于宏变量 [打印本页]

作者: shiyiming    时间: 2003-10-31 14:43
标题: 关于宏变量
初学者;
请问用let生成宏变量语句和call sysput生成宏变量语句有什么区别呢;
还有引用宏变量
作者: shiyiming    时间: 2003-10-31 16:54
起码从data步中取值的时候,就只能用Symput了

我觉得是赋值和取值的不同
作者: shiyiming    时间: 2003-11-3 11:14
sasprog问的是一个好问题。这两种方法在宏的应用中非常常见。

bowl说的非常有道理:“赋值和取值的不同”

1/ %let语句是global语句,在除DATATLINES外的任何地方可以出现,而在SAS BASE 中call sysput语句只能在data步中。另外call sysput也可出现在SCL。

2/ %let只是单次赋值(Creates a macro variable and assigns it a value);而call sysput可以灵活得获取data中变量值生成(多个)宏变量,当然也可以单个赋值(Assigns (a) value/s produced in a DATA step to (a) macro variables)。
如下面可生成宏变量POS1, POS2, POS3:
data team2;
   input position : $12. player $12.;
   call symput('POS'||left(_n_), position);
   cards;
shortstp Ann
pitcher Tom
frstbase Bill
;
run;


3/ 两者对结尾处的blank的处理也有所不同:
data _null_;
   call symput('TEST', 'SAS   ');
run;

%PUT **&TEST**; *retain trailing blank;

data _null_;
   call symput('TEST_SYMPUT', "&TEST");
;
run;
%LET TEST_LET =&TEST;

%put **&TEST_SYMPUT**;
%put **&TEST_LET**;

结果
8  %put **&TEST_SYMPUT**;
**SAS   **
9  %put **&TEST_LET**;
**SAS**

4/ 两者产生的宏变量都是全局宏变量,这点和PROC SQL SELECT INTO不同。

5/ call symput是在DATA步完成后才赋值的,这点需要小心。

5/ 可能还有其它差别,请补充。

与call symput对应的引用宏变量的方法是call symget,类似。




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2