楼主: 黄建荣
1329 6

[有偿编程] 求循环语句对本程序的更新 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

14%

还不是VIP/贵宾

-

威望
0
论坛币
795 个
通用积分
0.1200
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
7085 点
帖子
77
精华
0
在线时间
175 小时
注册时间
2010-5-8
最后登录
2022-2-23

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
关键词:循环语句 combine rename Where Merge wave where

回帖推荐

Imasasor 发表于2楼  查看完整内容

币有点少啊 %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;

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 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;
和谐拯救危机

使用道具

藤椅
Imasasor 发表于 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;
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

板凳
ziyenano 发表于 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;

使用道具

报纸
hopewell 发表于 2012-11-1 09:55:42 |只看作者 |坛友微信交流群
  1. data hjr(index=(id));
  2.     input id $ wave ref;
  3. datalines;
  4. 021.mn 760 0.221239
  5. 021.mn 400 0.0365875
  6. 023.mn 760 0.202741
  7. 023.mn 400 0.0352488
  8. 024.mn 760 0.217825
  9. ;
  10. proc transpose data=hjr out=combine(drop=_name_) prefix=R;
  11.     by id;
  12.     id wave;
  13.     var ref;
  14. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

观钓颇逾垂钓趣 种花何问看花谁

使用道具

地板
yuerqieqie 发表于 2012-11-1 20:52:27 |只看作者 |坛友微信交流群
merge by ID 么? 用macro很容易实现
  1. %macro combine();
  2.         %local i;
  3.         %do i = 400 %to 800;
  4.                 proc sort data = hjr(where = (wave = &i) rename = (ref = r&i)) out = r&i(keep = id r&i); by id; run;
  5.         %end;
  6.         data combine;
  7.                 merge %do i = 400 %to 800; r&i %end;;
  8.                 by id;
  9.         run;
  10. %mend;
  11. %combine();
复制代码
如果你的原始数据是unique at ID, wave level的,比如说同一个id, wave = 400只会出现一次的情况下,可以用transpose procedure。
  1. proc sort data = hjr(where = (400 <= wave <= 800)) out = subset; by id wave; run;
  2. proc transpose data = subset out = combine(drop = _name_) prefix = R;
  3.         by id;
  4.         id wave;
  5. var ref;
  6. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黄建荣 + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

7
黄建荣 发表于 2012-11-2 15:07:51 |只看作者 |坛友微信交流群
各位的回答均很精彩,可惜小弟金币太少,不然准如数奉上

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 23:05