全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1518 6
2012-10-31
悬赏 5 个论坛币 已解决
如下面程序所示,我要从数据集hjr中提取出新的数据集R400-R800,如果我一个一个输入抽取,很费劲,求一个循环能将我所要得到的数据全部放在combine数据集中,并只有变量ref被保存下来。
data R400;
set hjr(where=(wave=400));
rename ref=R400;
run;
data R401;
set hjr(where=(wave=401));
rename ref=R401;
run;
data R402;
set hjr(where=(wave=402));
rename ref=R402;
run;
data R403;
set hjr(where=(wave=403));
rename ref=R403;
run;
data R404;
set hjr(where=(wave=404));
rename ref=R404;
run;
data R405;
set hjr(where=(wave=405));
rename ref=R405;
run;
data R406;
set hjr(where=(wave=406));
rename ref=R406;
run;
data R407;
set hjr(where=(wave=407));
rename ref=R407;
run;
data R408;
set hjr(where=(wave=408));
rename ref=R408;
run;
data R409;
set hjr(where=(wave=409));
rename ref=R409;
run;
data R410;
set hjr(where=(wave=410));
rename ref=R410;
run;
data R411;
set hjr(where=(wave=411));
rename ref=R411;
run;
data R412;
set hjr(where=(wave=412));
rename ref=R412;
run;
data R413;
set hjr(where=(wave=413));
rename ref=R413;
run;
data R414;
set hjr(where=(wave=414));
rename ref=R414;
run;
data R415;
set hjr(where=(wave=415));
rename ref=R415;
run;
data R416;
set hjr(where=(wave=416));
rename ref=R416;
run;
data R417;
set hjr(where=(wave=417));
rename ref=R417;
run;
data R418;
set hjr(where=(wave=418));
rename ref=R418;
run;
data R419;
set hjr(where=(wave=419));
rename ref=R419;
run;
data R420;
set hjr(where=(wave=420));
rename ref=R420;
run;
data R421;
set hjr(where=(wave=421));
rename ref=R421;
run;
data R422;
set hjr(where=(wave=422));
rename ref=R422;
run;
data R423;
set hjr(where=(wave=423));
rename ref=R423;
run;
data R424;
set hjr(where=(wave=424));
rename ref=R424;
run;
data R425;
set hjr(where=(wave=425));
rename ref=R425;
run;
data R426;
set hjr(where=(wave=426));
rename ref=R426;
run;
data R427;
set hjr(where=(wave=427));
rename ref=R427;
run;
data R428;
set hjr(where=(wave=428));
rename ref=R428;
run;
data R429;
set hjr(where=(wave=429));
rename ref=R429;
run;.......

data R800;
set hjr(where=(wave=800));
rename ref=R800;
run;
data combine(drop=wave);
merge R401        R402        R403        R404        R405        R406        R407        R408        R409        R410        R411        R412        R413        R414        R415        R416        R417        R418        R419        R420        R421        R422        R423        R424        R425        R426        R427        R428        R429        ......   R800;
run;
proc print data=combine;
run;



hjr数据集如下:
combine数据集如:


最佳答案

pobel 查看完整内容

data test; set hjr; by id; where wave>=400 and wave
二维码

扫码加我 拉你入群

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

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

全部回复
2012-10-31 15:04:48
data test;
   set hjr;
   by id;
   where wave>=400 and wave<=800;
   array r(400:800) r400-r800;
   retain r400-r800;
   if first.id then call missing(of r400-r800);
   r(wave)=ref;
   if last.id then output;
   drop wave ref;
run;
二维码

扫码加我 拉你入群

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

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

2012-10-31 15:23:15
币有点少啊
%macro merge;
%do i=400 %to 800;
data R&i;
set hjr(where=(wave=&i));
rename ref=R&i;
run;
%end;
data combine(drop=wave);
merge %do i=400 %to 800; R&i  %end;
run;
%mend;
%merge

run;
二维码

扫码加我 拉你入群

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

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

2012-10-31 15:34:23
data hjr;
input id $ wave ref;
cards;
021.mn 400 1
021.mn 400 2
021.mn 400 3
021.mn 401 1
021.mn 401 2
;
run;
proc transpose data=hjr(where=(400<=wave<=800)) out=temp(drop=_name_);
by wave id;
var ref;
run;
proc transpose data=temp out=combine(drop=_name_) prefix=R;
id wave;
by id;
run;
二维码

扫码加我 拉你入群

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

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

2012-11-1 09:55:42
复制代码
二维码

扫码加我 拉你入群

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

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

2012-11-1 20:52:27
merge by ID 么? 用macro很容易实现
复制代码
如果你的原始数据是unique at ID, wave level的,比如说同一个id, wave = 400只会出现一次的情况下,可以用transpose procedure。
复制代码
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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