全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3520 13
2012-05-13
我有这么一组数据:
Stkcd        nature        year
000002        1        2003
000002        0        2005
000004        1        2006
000004        0        2010
000004        0        2011
000005        0        2007
000006        1        2002
000006        1        2004
000006        1        2010

其中nature的1是国有,0是非国有;year是国有非国有变换性质的时间。
我其实是想要每个股票07年-10年的经济性质。比如000004这个,06年是1,那07、08、09三年都填充成1,10年是0就保留。
其余类似。

真心请教如何才能实现?请大牛帮忙~~~~
二维码

扫码加我 拉你入群

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

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

全部回复
2012-5-13 10:56:55
复制代码
怎么我这么运行完,year都变成1965了,这是咋回事啊?
如果能将year变成时间格式,我就有办法解决楼主的问题了
二维码

扫码加我 拉你入群

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

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

2012-5-13 17:48:29
看看行不?
data stk;
  input stkcd nature year;
cards;
000002        1        2003
000002        0        2005
000004        1        2006
000004        0        2010
000004        0        2011
000005        0        2007
000006        1        2002
000006        1        2004
000006        1        2010
;
run;

proc sort data=stk out=stk1;
  by stkcd  year nature ;
run;

/*填充缺失的年数*/
data stkcd2;
  set stk1;
    by stkcd year nature ;
  retain year1;
  if first.stkcd then year1=year;
  if (year-year1)>1 then do i=1 to (year-year1);
                                                   year1+1;
                           output;
                        end;
                                        else if (year-year1)<=1 and not (first.stkcd) then do;
                                             year1+1;
                                           output;
                                         end;

                                         else do;
                                           output;
                                         end;

  drop i ;
run;

/*标记nature的变化*/
proc sql noprint;
   create table stkcd3 as
      select a.nature as nature1
                 ,b.*
                          from stkcd2 as b
                             left join
                               stk as a
                          on a.stkcd=b.stkcd and a.year=b.year1;
quit;

data stkcd4;
  set stkcd3;
  retain nature3;
  if nature1 ne . then nature3=nature;
  drop nature1 nature year;
run;
二维码

扫码加我 拉你入群

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

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

2012-5-14 17:33:39
真是太感谢了!打死我也写不出这样的程序~~~
狂赞!!!

还有一个小问题,可能我没有表达清楚。
比000002这个,我希望把05年的状态传到06、07、08、09、10年去。这个该怎么办呢?
二维码

扫码加我 拉你入群

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

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

2012-5-14 17:37:20
endogeneity 发表于 2012-5-13 10:56
怎么我这么运行完,year都变成1965了,这是咋回事啊?
如果能将year变成时间格式,我就有办法解决楼主的问 ...
不妨手工把几个年份改一下。关键想知道您后面怎么做。谢谢~~
二维码

扫码加我 拉你入群

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

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

2012-5-14 23:51:05
endogeneity 发表于 2012-5-13 10:56
怎么我这么运行完,year都变成1965了,这是咋回事啊?
如果能将year变成时间格式,我就有办法解决楼主的问 ...
2003 days are about 5 to 6 years. Oftentimes SAS calculates dates from 1960. after 5 to 6 years, it is about year 1965.
here you have no reason to put year. format to a year value.
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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