【发布时间】:2017-09-02 01:46:04
【问题描述】:
我的问题如下 - 我有这段代码可以正常工作,并将保存到宏变量中的字符添加到表中:
%let year=2015;
data example;
input year $40.;
years=dequote(resolve(quote(year)));
datalines;
&year
;
run;
现在我想在宏内部做同样的事情,代码如下:
%macro pokus();
%let year=2015;
data example;
input year $40.;
years=dequote(resolve(quote(year)));
datalines;
&year
;
run;
%mend pokus;
%pokus;
为什么会这样?有没有一些简单的方法可以将宏变量添加到宏内的表中? 我需要它来执行这种类型的循环:
%macro pokus();
%do i=2015 %to 2017;
%let year=&i.;
data example;
input year $40.;
years=dequote(resolve(quote(year)));
datalines;
&year
;
run;
....additional code .....
%end;
%mend pokus;
%pokus;
补充说明—— 这是以这种方式继续进行的更复杂练习的一部分:
data z;
length roky mesic mesic2 saz $100;
input roky mesic mesic2 saz;
datalines;
2012 01 1 k
2012 02 2 h
2012 03 3 j
2012 04 4 x
2012 05 5 l
2012 06 6 m
;
run;
proc sql;
select count (*) into: pocet from z;
quit;
%macro rok();
%do i=1 %to &pocet;
data _null_;
set z (obs= &i);
call symputx("roky",roky);
call symputx("mesic",mesic);
call symputx("mesic2",mesic);
call symputx("saz",saz);
run;
...... additional code .....
%end;
%mend rok;
%rok;
现在我想让它动态化,即首先计算列“roky”的所有内容,其值为 2012,而不是 2013、2014 等。但我无法在此构造之上构建另一个宏,以更改 z 表中的“roky”列。
感谢您的帮助。
【问题讨论】:
-
你到底为什么要取消引用->解析->引用宏变量?
-
我已经用谷歌搜索过 (support.sas.com/kb/43/295.html) - 对我来说,这是将存储在宏变量中的值放入由数据线定义的表示例中的唯一方法
-
你所做的仍然没有任何意义;看来您应该改为发布您最终真正想做的事情,而不仅仅是您的方法,因为在我看来,这不是一种合乎逻辑的方法。发布一个新问题,并包含您的程序的全部目的(或者至少,不仅仅是“附加代码”——这通常是做什么的?)。
-
我终于找到了更简单的解决方案。非常感谢。
标签: sas