全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1781 4
2014-09-17
悬赏 20 个论坛币 已解决
想实现的功能是,对于每个stkcd , 如果ygs的观测小于5个,那么则把year赋值给ygs。如果ygs观测大于等于5,如果它的值是0,那么仍然把year赋值给ygs.
谢谢
3.png

原图尺寸 8.33 KB

3.png

最佳答案

qiaosonh 查看完整内容

proc sql; create table tmp as select a.stkcd, case when b.cnt=5 and b.cnt=c.cnt) then year else a.ygs end as ygs from gsvot5 as a left join (select stkcd, count(*) as cnt from gsvot5 group by stkcd) as b on a.stkcd=b.stkcd left join (select stkcd, count(*) as cnt from gsvot5(where=(ygs=0)) group by stkcd) as c on a.stkcd=c.stkcd; quit;
二维码

扫码加我 拉你入群

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

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

全部回复
2014-9-17 22:31:37
proc sql;
create table tmp as
select a.stkcd,
case
  when b.cnt<5 or (b.cnt>=5 and b.cnt=c.cnt) then year
  else a.ygs
end as ygs
from gsvot5 as a left join
  (select stkcd, count(*) as cnt from gsvot5 group by stkcd) as b
on a.stkcd=b.stkcd
left join
  (select stkcd, count(*) as cnt from gsvot5(where=(ygs=0)) group by stkcd) as c
on a.stkcd=c.stkcd;
quit;
二维码

扫码加我 拉你入群

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

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

2014-9-21 01:18:33
proc sql;
create table tmp as
select a.stkcd,
case
  when b.cnt<5 or (b.cnt>=5 and a.ygs=0) then year
  else a.ygs
end as ygs
from gsvot5 as a left join
  (select stkcd, count(*) as cnt from gsvot5 group by stkcd) as b
on a.stkcd=b.stkcd;
quit;
二维码

扫码加我 拉你入群

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

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

2014-9-21 09:09:57
xuexi xuexi xuexi
二维码

扫码加我 拉你入群

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

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

2014-9-21 10:58:25
qiaosonh 发表于 2014-9-21 01:18
proc sql;
create table tmp as
select a.stkcd,
对于每个stkcd , 如果ygs的观测小于5个,那么则把year赋值给ygs。如果ygs观测大于等于5,如果它的值是都是0,那么仍然把year赋值给ygs.否则,那么则保持不变

附件列表

gsvot5.xls

大小:83 KB

 马上下载

二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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