全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3412 7
2016-05-10
图片1 图片2
大家好,

我想请教一个sas问题,我有一组数据如图1所示,对于每个股票代码,每一年都有一个序号gp。我想在这个表后面加一列trdmnt。比如000001,1996,对应的gp=4 我希望能把这行加一列,把这个year=1996对应的gp序号用于199607-199706.

请问一下这个有没有办法写一个macro来实现?

说白了就是对每只股票我在每年7月做了一个排序,但是我想把这个排序序号给保留12个月,12个月之后再重新进行排序。

图片2是我希望得到的数据集的样子。

由于第一张图中每年的股票数量是变化的,所以很难先生成stkcd和trdmnt的序列,再merge回去。还是比较希望从图片1出发来写个macro,把排序序号保留12个月来实现。

请高手不吝赐教!感谢!

如果程序可行的话我可以给大家论坛币,这都没问题的。谢谢大家!

二维码

扫码加我 拉你入群

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

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

全部回复
2016-5-11 04:51:20
data one (drop=i j) ;
  set orig ;
  length tvdmnt $12 ;
  do i=1 to 12 ;
         if i<=6 then j=i+6 ;
         else j=i-6;
         tvdmnt = trim(year)||'-'|| put(j,z2.) ;
         output ;
  end ;
run ;
二维码

扫码加我 拉你入群

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

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

2016-5-11 10:03:03
复制代码
二维码

扫码加我 拉你入群

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

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

2016-5-11 11:07:50
yingzi2003 发表于 2016-5-11 04:51
data one (drop=i j) ;
  set orig ;
  length tvdmnt $12 ;
您好,非常感谢您的回复。

但是我运行了您的程序之后,如图所示。生成的tvdmnt并没有把year和 j 合并起来形成1996-07的这种字符形式,可以再帮我看看是哪里出了问题吗?  附件的zip文件中我也给出了我要处理的原始sas数据集,可不可以请您方便时候再帮我看一下?谢谢!

111.png
数据.zip
大小:(447.4 KB)

 马上下载

二维码

扫码加我 拉你入群

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

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

2016-5-11 14:40:12
白塔湖123 发表于 2016-5-11 11:07
您好,非常感谢您的回复。

但是我运行了您的程序之后,如图所示。生成的tvdmnt并没有把year和 j 合并起 ...
主要是你应该把trdmnt转换成数字格式
而不是沿用国泰安里面最初的字符格式
不然 建投资组合的研究
完全不需要再做这样的动作
二维码

扫码加我 拉你入群

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

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

2016-5-11 23:57:55
程序已经改好, 因为你的year是数字型, 只要改成字符型就可以.

data one (drop=i j) ;
   set templib.statement7 ;
   length tvdmnt $12 ;
   do i=1 to 12 ;
          if i<=6 then j=i+6 ;
          else j=i-6;
          tvdmnt = put(year,4.)||'-'|| put(j,z2.) ;
          output ;
   end ;
run ;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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