CALL SYMPUT与CALL SYMPUTX区别

来源:互联网 发布:美工设计岗位职责 编辑:程序博客网 时间:2024/05/18 01:13
call symput 在data步中将值塞入宏变量
http://www2.sas.com/proceedings/sugi29/052-29.pdf

[SAS] CALL SYMPUTCALLSYMPUTX

CALL SYMPUT的功能是可以在DATA step内将值塞到一个macro变量里面。如果这个macro变量已经存在,那这个call就会更新该macro变量的值。

CALL SYMPUT简介

CALL SYMPUT基本用法:

CALL SYMPUT (macro便俩个 , );

注:不会自动去除值前后的空白

可以分成常见的两种写法:

(1) 这一行statement可以將值Cookie塞入macro变量Gift里面,值必须给予单引号

call symput (‘Gift’,'Cookie’);

(2) DATA set变量nage的值塞入macro变量a14。这里macro变量名称为a14,存在DATA step的字串变量myvar

myvar=’a14′;
call symput (myvar,nage);

CALL SYMPUT范例

data temp;
     set sashelp.class end=eoa;
     if age gt 14 then nage+1;
     if eoa then call symput(‘n14′,put(nage,z2.));
run;
proc means data=temp;
     title “N of student that age more than 14 years old: &n14“;
     var age;
run;

程序中put(nage,z2.),用put做数字转文字的转换,将nage算好的值变成文字。不用put函数也可以,因为sas会自动帮你转换,但是差别在于对对其余空格让版面很丑。

結果如下


CALL SYMPUTX简介

CALL SYMPUTX基本写法:

CALL SYMPUTX (macro变量 , text , );

上面提到CALL SYMPUT不会把值的前后空白去掉,但是CALL SYMPUTX会自动去点前后空白

而且第三个位置的是选择性的设定,可由3种选择

分別是G(global symbol table)L(local symbol table)F(macro变量已存在与任一个symbol table)

CALL SYMPUT范例

在这个例子,CALL SYMPUTX被放在cards之前,因此在每次DATA step执行的时候,CALL SYMPUTX就会执行

此程式目的在抓取最后一笔booktitle的值

data newbooks;

     input booktitle $ 1-40;

     call symputx('lasttitle',booktitle);

     cards;

  Hello Java Programming

  My Encyclopedia of Newworks

  Strategic Computer Programming

  Everday Email Eriquette

  ;

run;

%put The value of macro var LASTTTILE is &lasttitle.;

結果

The value of macro var LASTTTILE is Everday Email Eriquette

因为资料最后一笔值是「Everday Email Eriquette」,就会被写入put里面。