楼主: 小鳄鱼a
1980 11

请看个程序 [推广有奖]

  • 6关注
  • 10粉丝

已卖:280份资源

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

楼主
小鳄鱼a 发表于 2015-11-30 23:32:04 |AI写论文
100论坛币
说明在附件

最佳答案

wodewin 查看完整内容

data dat; input id $ year qtr; datalines; 张生 1999 4 张生 2000 1 张生 2000 2 张生 2000 3 张生 2000 4 张生 2001 1 张生 2001 2 张生 2001 3 张生 2001 4 张生 2002 1 张生 2002 2 张生 2002 3 张生 2002 4 ...
关键词:程序

沙发
wodewin 发表于 2015-11-30 23:32:05
data dat;
  input id $ year qtr;
  datalines;
张生        1999        4
张生        2000        1
张生        2000        2
张生        2000        3
张生        2000        4
张生        2001        1
张生        2001        2
张生        2001        3
张生        2001        4
张生        2002        1
张生        2002        2
张生        2002        3
张生        2002        4
张生        2003        1
张生        2003        2
张生        2003        3
张生        2003        4
张生        2004        1
张生        2004        2
张生        2004        3
张生        2004        4
;
run;

proc sql;
  create table res as
  select *,year+0.1*qtr as mark,case when max(year)-3>min(year) then 1 else 0 end as flag from dat
  group by id order by id,year,qtr;
  create table b as
  select id,year,qtr from res having mark=min(mark)
  union
  select id,year,qtr from res having flag=1 and mark=max(mark)-3;
quit;

这样能不能满足要求********************************************************************************
意思理解错误,正确解法请看10楼  @Tigflanker

藤椅
Tigflanker 发表于 2015-12-1 08:54:52
抱歉,理解有误,经提示修改顺序:

源数据集:
id        year        qtr
张生        1999        4
张生        2001        4
王五        1998        1
要求数据集:
id        year        qtr
张生        1999        4
张生        2000        1
张生        2000        2
张生        2000        3
张生        2000        4
张生        2001        1
张生        2001        2
张生        2001        3
张生        2001        4
张生        2002        1
张生        2002        2
张生        2002        3
张生        2002        4
张生        2003        1
张生        2003        2
张生        2003        3
张生        2003        4
张生        2004        1
张生        2004        2
张生        2004        3
张生        2004        4

要求:
规则是:每一个观测出现后,会拥有连续三年观测,比如1999 4 会持续到2002 4 , 而 2001 4 会持续到  2004 4  ,这两段时间有覆盖 的时候,算并集。 王五从 1998 1 计算到  2001 1

已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
yongyitian + 5 + 3 + 3 + 3 好的意见建议

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

板凳
teqel 发表于 2015-12-1 11:25:43
时间换算比较啰嗦
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
yongyitian + 5 + 2 + 2 + 2 分析的有道理

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

报纸
Tigflanker 发表于 2015-12-2 14:12:31
我觉得我还是有点儿没看懂,我又下载你的附件确认没有丢信息;

你这到底想是做啥?是每三年的费用合计还是标注个什么?
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 5 + 5 + 5 精彩帖子
yongyitian + 5 + 2 + 2 + 2 分析的有道理

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

地板
wodewin 发表于 2015-12-2 17:35:03
proc sql;
  create table out as
  select id, year,qtr from (
             select *,year+0.1*qtr as mark from dat
            )
group by id having mark=max(mark)-3 or mark=min(mark)  order by id,year;
quit;

我简化了一下,但如果数据集中的个体观测不足3年就不太好用了
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 2 + 3 + 4 分析的有道理

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

7
wodewin 发表于 2015-12-2 17:35:08

proc sql;
  create table out as
  select id, year,qtr from (
             select *,year+0.1*qtr as mark from dat
            )
  having mark=max(mark)-3 or mark=min(mark);
quit;

我简化了一下,但如果数据集中的个体观测不足3年就不太好用了

8
wodewin 发表于 2015-12-2 17:35:14

proc sql;
  create table out as
  select id, year,qtr from (
             select *,year+0.1*qtr as mark from dat
            )
  having mark=max(mark)-3 or mark=min(mark);
quit;

我简化了一下,但如果数据集中的个体观测不足3年就不太好用了

9
小鳄鱼a 发表于 2015-12-3 11:04:47
Tigflanker 发表于 2015-12-1 08:54
我把数据贴出来:

要求数据集:
是不是贴错了   上面是原数据集  下面是希望呈现的数据集

10
小鳄鱼a 发表于 2015-12-3 11:05:33
wodewin 发表于 2015-12-2 17:24
data dat;
  input id $ year qtr;
  datalines;
楼上的应该贴错了   上面是原数据集  下面是希望呈现的数据集   就是从少的数据扩展到多的数据

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 11:54