全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4382 25
2014-06-27
悬赏 15 个论坛币 已解决
有个SAS程序的问题想请教大家,如下:
hs    code    year1     year2
1     1234    2004    2004
1     2345    2004    2004
1     3456    2004    2004
1     3456    2005    2004
1     4567    2004    2004
1     4567    2005    2004
1     5678    2004    2004
1     5678    2005    2004
1     5678    2006    2004
.......
想要的结果是生成一个新的变量number,如果year1=year2,则number=0,
如果year1不等于year2(一定是year1大于year2),例如,
hs    code    year1     year2
1     3456    2005    2004

year1大于year2,查比2005小也就是2004对应的code的个数(除去自己本身,只数这条数据前面的数据)得到2,再例如
hs    code    year1     year2
1     5678    2006    2004

year1=2006,则看year1=2004和2005时的code的个数,为4
最后的结果是:
hs    code    year1   year2       number
1     1234    2004   2004          0
1     2345    2004    2004         0
1     3456    2004    2004         0
1     3456    2005    2004         2
1     4567    2004    2004         0
1     4567    2005    2004         2  
1     5678    2004    2004         0
1     5678    2005    2004         2
1     5678    2006    2004         4


有些复杂,恳请各位帮忙,如果不清楚的,我可以再解释,多谢多谢

最佳答案

hello_fj 查看完整内容

明白了 你看看是不是这样
二维码

扫码加我 拉你入群

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

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

全部回复
2014-6-27 09:42:12
liuliuqiu 发表于 2014-6-27 10:44
不好意思,这点我没有说清楚。其实是这样,code代表是企业的代码,year1代码企业出口的年份,每个企业后面 ...
复制代码
明白了 你看看是不是这样
二维码

扫码加我 拉你入群

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

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

2014-6-27 09:49:33
不太明白。。year1大于year2,查比2005小也就是2004对应的code的个数(除去自己本身,只数这条数据前面的数据)得到2   不是应该是3吗
二维码

扫码加我 拉你入群

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

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

2014-6-27 09:56:20
hello_fj 发表于 2014-6-27 09:49
不太明白。。year1大于year2,查比2005小也就是2004对应的code的个数(除去自己本身,只数这条数据前面的数 ...
查year1=2004的个数是3,是
hs    code    year1   year2       number
1     1234    2004   2004          0
1     2345    2004    2004         0
1     3456    2004    2004         0
但是,要除去code=3456,也就是自身的情况,这样只剩下前两个code=1234和2345了。
谢谢
二维码

扫码加我 拉你入群

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

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

2014-6-27 10:20:52
在线等,请各位帮忙解答一下吧,多谢多谢
二维码

扫码加我 拉你入群

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

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

2014-6-27 10:21:31
是这个意思吗?

data test;
input hs    code    year1     year2;
cards;
1     1234    2004    2004
1     2345    2004    2004
1     3456    2004    2004
1     3456    2005    2004
1     4567    2004    2004
1     4567    2005    2004
1     5678    2004    2004
1     5678    2005    2004
1     5678    2006    2004
;

%macro cnt;
proc sql noprint;
select max(year1-year2) into: maxnum
from test;
quit;
data wanted;
set test;
if hs ne lag(hs) then call missing(n);
if code ne lag(code) then n+1;
if year1=year2 then number=0;
%let i=1;
%do i=1 %to &maxnum;
if number=. then flag&i+1;
if year1-year2=&i then number=n-flag&i;
%end;
drop n flag:;
run;
%mend;
%cnt
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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