【发布时间】:2016-10-25 15:37:55
【问题描述】:
“DATA”库中有大约 100 个数据集。我使用以下代码拆分库中的所有数据集。
- 首先,我使用
proc sql将所有数据集放入一个表中并编号。 - 其次,我还使用
proc sql读取每个数据集中的内容,以便设置拆分规则。更具体地说,拆分过程基于两个变量:date_l_ 和_ric。显然,date_l_ 是一个日期变量。 _ric 是标识股票名称的变量。这一步的结果如下所示:
。
- 最后,我使用
%do j=1 %to &obs.来拆分数据集。
我找不到这个问题的根源,因为我没有将任何数据集命名为 WORK.SET。
%macro split(sourcelib=,from=,going=);
proc sql noprint; /*read datasets in a library*/
create table mytables as
select *
from dictionary.tables
where libname = &sourcelib
order by memname ;
select count(memname)
into:numb
from mytables;
%let numb=&numb.;
select memname
into : memname1-:memname&numb.
from mytables;
quit;
%do i=1 %to &numb.;
proc sql noprint;
create table tmp&i as
select distinct date_l_, _ric
from &from.&&memname&i;
select count(*)
into :obs
from work.tmp&i;
%let obs=&obs.;
select date_l_, _ric, catx("_", substr(_ric, 1, 13), date_l_)
into :date_l_1-:date_l_&obs., :ric1-:ric&obs., :setname1-:setname&obs.
from work.tmp&i;
quit;
%end;
data
%do j = 1 %to &obs.;
&going.&&setname&j
%end;
;
%do i=1 %to &numb.;
set &from.&&memname&i
%end;
;/*may invoking i to numb.*/
select;
%do j = 1 %to &obs.;
when(_ric = "&&ric&j" and date_l_ = &&date_l_&j) output &going.&&setname&j;
%end;
end;
%mend;
%split(sourcelib='AXP',from=AXP.,going=AXP.)
【问题讨论】:
标签: loops error-handling split macros sas