全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
8909 13
2013-01-14
原题是adv130中的一题,程序为:

%macro location;
data _null_;
call symput('dept','sales');
run;
%let country=Germany;
%put _global_;
%mend;
%let company=ABC;
%location

-----题目问:被写入SAS log的宏变量有哪些?
我run的结果确实与答案一致,被写入的宏变量有 dept 和company
company好理解。
但定义macro location的时候,利用symput创建的宏变量 dept怎么也是global呢?
求解,谢谢各位~

搭车问跟这一题很类似的另一问题:

%macro location(country);
proc sql;
select 'sales',* into:dept
from sashelp.class;
quit;
%put _global_;
%mend;
%location(US)
程序RUN的时候有warning:INTO clause specifies fewer host variables than columns listed in the SELECT clause.
这个意思是说,创建的宏变量数量过少,对不?
这里的 select‘sales’,* ---怎么理解呢?sales是啥?为什么要加‘’,后面为啥是* ?

谢谢~~



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-1-14 10:09:38
Call SYMPUT() 会将创建的宏变量存入到最近的非空的symbol table 中,如果运行到call symput时宏location里已经有了局部宏变量,那call symput创建的宏变量就是local的,否则就会存到更外层。

SAS HELP:
"SYMPUT puts the macro variable in the most local nonempty symbol table. A symbol table is nonempty if it contains
     a value
     a computed %GOTO (A computed %GOTO contains % or & and resolves to a label.)
     the macro variable &SYSPBUFF, created at macro invocation time.
"
下面的程序就会把call symput创建的变量存到local里面:
复制代码
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-14 10:15:17
后面那个问题:

用select into 创建宏变量的时候,会将SELECT中第一个变量的值放到INTO所指定的第一个宏变量中,第二个变量的值放到第二个宏变量中, ... ...

因此,变量的个数应该是一致的,例子中into后面只跟了一个变量,而却SELECT了多个,因此会有warning。
该例子执行的结果应该是将宏变量dept的值设定为sales,而与from的数据集没有关系。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-15 00:06:52
谢谢指教~ :)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-8-13 10:46:35
那为什么没有COUNTRY呢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-8-13 10:51:00
pobel 发表于 2013-1-14 10:09
Call SYMPUT() 会将创建的宏变量存入到最近的非空的symbol table 中,如果运行到call symput时宏location里 ...
大侠写的程序多次重复
%put _local_;
%put;
%put _global_;
是起到什么作用呢?多谢了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群