作者tew (咖啡王子)
站内Statistics
标题Re: [程式] sas资料选取问题
时间Thu Jun 24 14:46:37 2010
: : ..
: : .
: : 谢谢大家:D
: data test;input comp_id date yymmdd8. a;
: format date yymmddn8.;
: cards;
: 4212 20090415 0.15
1101 20090415 0.14
: 3232 20090416 1.23
1101 20090416 1.12
: 1101 20090417 2.33
1101 20090418 1.66
: 9232 20090418 1.66
: 8422 20090512 2.36
1101 20090512 2.33
: 1102 20090612 1.42
: 6473 20090613 2.42
: ;
: run;
如果资料形式是这样
下面的巨集如何抓出
1101 20090417以前的资料
我找不出您考量这部分的语法之处
当然 最主要是 我弄不懂原问者的问题
你可以再试试看
: %macro date(comp_id=,n=);
: data _null_;set test(where=(comp_id in (&comp_id.)));
: call symput('date',date);run;
: data test&n.;set test(keep=date);comp_id=&comp_id.;if date <= &date.;run;
: %mend;
: %date(comp_id=1101,n=1);
: %date(comp_id=1102,n=2);
: data test;set test1 test2;
: proc sort data=test;by comp_id date;run;
: comp_id就是公司名,n=1表示产生test1这个资料,内容是comp_id=1101时日期小於
: 20090417的结果
: 最後的test合并test1 test2就是你想要的资料
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 134.208.29.183
1F:推 imaltar:因为是他的资料公司是不重复的 有重复的话就要修改 06/24 14:49
2F:→ tew:这样他的资料 似乎也抓不出1101 20090417以外的资料 06/24 14:54
3F:推 imaltar:可以阿 我是先抓1101所对应的资料 然後用call symput 06/24 14:58
4F:→ imaltar:设定其对应的日期 也设定&comp_id为1101 然後用原本的资料 06/24 15:00
5F:→ imaltar:每一个日期去跟设定的日期去比 取小於等於的 并且DROP掉 06/24 15:00
6F:→ imaltar:原资料的comp_id 新产生的test1 设定comp_id为&comp_id 06/24 15:01
7F:→ imaltar:因此可以抓到所有日期小於20090417的资料 只是comp_id都 06/24 15:03
8F:→ imaltar:设成1101 06/24 15:03
9F:→ imaltar:因为他後来希望的结果是希望公司名称都是1101 06/24 15:04
10F:→ tew:那我懂他的问题了 06/24 15:11