楼主: akalius
970 7

补齐相应观测a [推广有奖]

  • 10关注
  • 3粉丝

讲师

48%

还不是VIP/贵宾

-

威望
0
论坛币
4168 个
通用积分
9.1543
学术水平
4 点
热心指数
6 点
信用等级
6 点
经验
7832 点
帖子
261
精华
0
在线时间
605 小时
注册时间
2009-7-22
最后登录
2024-4-9

楼主
akalius 学生认证  发表于 2017-3-20 18:31:23 |只看作者 |坛友微信交流群|倒序 |AI写论文
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 ...
关键词:Institutions Institution tions year name
沙发
wwang111 发表于 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;

使用道具

藤椅
akalius 学生认证  发表于 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;

使用道具

板凳
wwang111 发表于 2017-3-21 10:57:43 |只看作者 |坛友微信交流群
akalius 发表于 2017-3-21 10:44
谢谢    这段是什么意思呢   没大看懂  

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

使用道具

报纸
l1i2n3i4n5g 在职认证  发表于 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;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
akalius + 5 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

地板
akalius 学生认证  发表于 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的观测将是没有的    谢谢

使用道具

7
akalius 学生认证  发表于 2017-4-1 10:09:03 |只看作者 |坛友微信交流群
wwang111 发表于 2017-3-21 10:57
这一步是只把你需要的记录筛选出来,比如王五从2013-4开始,到2015-2结束,其他的记录就不要了,比如2013 ...
请再看看程序    有些错误    即如果王五出现年份为间隔的  假如  2013   2015 出现 , 那么2014的观测将是没有的    谢谢xiexie

使用道具

8
akalius 学生认证  发表于 2017-4-1 15:05:25 |只看作者 |坛友微信交流群
l1i2n3i4n5g 发表于 2017-3-21 12:49
data test;
input name :$10.        year        qtr        institution :$20.        sex :$10.;
cards;
请问这个是什么原理呢  


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

使用道具

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

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

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

GMT+8, 2024-4-20 06:11