【发布时间】:2018-05-04 20:31:28
【问题描述】:
早安,
我有不同格式的旧数据并用新数据更新它。想法是变量WantedName 用下划线Wanted_Name 编写,而新数据没有这个。不过我没什么大不了的。
编辑:WantedName 和 Wanted_Name 是 SAS 日期。
原始数据:
year Wanted_Name
2013 1234
2013 4321
2013 3241
从 2015 年开始:
year WantedName
2015 5678
2015 8765
....
我试了一下逻辑:
%macro macro_env;
data _null_;
call symput ("curr_year", year(date()) );
run;
data long_data;
set
%do year=2013 %to &curr_year.;
data.history&year.
%end;
;
WantedName=COALESCE(WantedName, Wanted_Name);
run;
%mend macro_env;
不。不工作。由于某种原因,它采用了Wanted_Name 的第一个值并将其粘贴到整个数据范围内,除了新数据:
year Wanted_Name WantedName
2013 1234 1234
2013 4321 1234
2013 3241 1234
....
2015 . 5678
2015 . 8765
现在我设法通过删除coalesce 函数并添加额外的数据语句来解决这个问题:
data long_data;
set
%do year=2013 %to &curr_year.;
data.history&year.
%end;
;
run;
data long_data;
set long_data;
WantedName=COALESCE(WantedName, Wanted_Name);
run;
问题:会发生什么或为什么原来的 macro_env 不起作用?
我认为set 中的数据集是先加载的,然后再应用函数。 (在后一个数据语句中哪个起作用。显然不是……也许?
【问题讨论】: