全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1262 7
2017-03-20
悬赏 200 个论坛币 已解决
原始数据
nameyearqtrinstitutionsex
张三

2013

1

微软
张三

2013

4

微软
张三

2014

3

微软
张三

2015

1

脸书
李四

2015

2

联合利华
王五

2013

4

谷歌
王五

2014

3

华为
王五

2015

2

小米



想要的数据   第一种列在这   谢谢

nameyearqtrinstitutionsex
张三

2013

1

微软
张三

2013

2

微软
张三

2013

3

微软
张三

2013

4

微软
张三

2014

1

微软
张三

2014

2

微软
张三

2014

3

微软
张三

2014

4

微软
张三

2015

1

脸书
李四

2015

2

联合利华
王五

2013

4

谷歌
王五

2014

1

谷歌
王五

2014

2

谷歌
王五

2014

3

华为
王五

2014

4

华为
王五

2015

1

华为
王五

2015

2

小米


最佳答案

wwang111 查看完整内容

proc sql; create table endpoint as select name, min(catx('-',year,qtr)) as start, max(catx('-',year,qtr)) as stop from test group by 1; quit; proc sort data=test; by name year qtr; run; proc sql; create table allclass1 as select distinct name, year from test; quit; data allclass2; set allclass1(keep=name year); do qtr=1 to 4; output; end; run; proc sort dat ...
二维码

扫码加我 拉你入群

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

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

全部回复
2017-3-20 18:31:24
proc sql;
create table endpoint as
select name, min(catx('-',year,qtr)) as start, max(catx('-',year,qtr)) as stop
from test
group by 1;
quit;

proc sort data=test;
by name year qtr;
run;

proc sql;
create table allclass1 as
select distinct name, year
from test;
quit;

data allclass2;
set allclass1(keep=name year);
do qtr=1 to 4;
output;
end;
run;

proc sort data=allclass2;
by name year qtr;
run;

data allclass;
merge test allclass2;
by name year qtr;
length _ins _sex $40;
retain _ins _sex;
if first.name then do;_ins=' ';_sex=' ';end;
if ^missing(institution) then do;
  _ins=institution;
  _sex=sex;
end;
else do;
  institution=_ins;
  sex=_sex;
end;
time=catx('-',year,qtr);
drop _ins _sex;
run;

data wanted;
set allclass;
do i=1 to nobs;
  set endpoint(rename=(name=name1)) point=i nobs=nobs;
  if name=name1 and time>=start and time<=stop then output;
end;
drop name1 time start stop;
run;
二维码

扫码加我 拉你入群

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

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

2017-3-21 10:44:24
wwang111 发表于 2017-3-20 18:31
proc sql;
create table endpoint as
select name, min(catx('-',year,qtr)) as start, max(catx('-',y ...
谢谢    这段是什么意思呢   没大看懂  

data wanted;
set allclass;
do i=1 to nobs;
  set endpoint(rename=(name=name1)) point=i nobs=nobs;
  if name=name1 and time>=start and time<=stop then output;
end;
drop name1 time start stop;
run;
二维码

扫码加我 拉你入群

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

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

2017-3-21 10:57:43
akalius 发表于 2017-3-21 10:44
谢谢    这段是什么意思呢   没大看懂  

data wanted;
这一步是只把你需要的记录筛选出来,比如王五从2013-4开始,到2015-2结束,其他的记录就不要了,比如2013-3,2015-3
二维码

扫码加我 拉你入群

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

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

2017-3-21 12:49:28
data test;
input name :$10.        year        qtr        institution :$20.        sex :$10.;
cards;
张三        2013        1        微软        男
张三        2013        4        微软        男
张三        2014        3        微软        男
张三        2015        1        脸书        男
李四        2015        2        联合利华        女
王五        2013        4        谷歌        男
王五        2014        3        华为        男
王五        2015        2        小米        男
;
run;

data test1;
set test;
date=mdy(qtr*3,01,year);
format date yyqc6.;
run;

proc sort data=test1 out=test2;
by name date;
run;

proc expand data=test2 out=test3 from=qtr to=qtr method=none;
by name;
id date;
run;

data test4;
set test3;
retain tmp_institution;
if not missing(year) then tmp_institution=institution;
else do;
        year=year(date);
        qtr=qtr(date);
        institution=tmp_institution;
end;
drop date tmp_institution;
run;
二维码

扫码加我 拉你入群

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

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

2017-3-30 15:05:38
wwang111 发表于 2017-3-20 18:31
proc sql;
create table endpoint as
select name, min(catx('-',year,qtr)) as start, max(catx('-',y ...
请再看看程序    有些错误    即如果王五出现年份为间隔的  假如  2013   2015 出现 , 那么2014的观测将是没有的    谢谢
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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