楼主: 赵天静
2850 7

请问怎么给相同的股票代码后面加上一列相同的数字? [推广有奖]

  • 0关注
  • 0粉丝

大专生

28%

还不是VIP/贵宾

-

威望
0
论坛币
417 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
398 点
帖子
33
精华
0
在线时间
45 小时
注册时间
2015-12-3
最后登录
2018-8-2

10论坛币
前面的股票代码(stkcd)类似这样的一列数字:

000004
000004
000004
000002
000002
000007
000007
600021
600021
600021


.................
想多加一列从1开始的数字(num)作为标签变成这样:

000004   1
000004   1
000004   1
000002   2
000002   2
000007   3
000007   3
600021   4
600021   4
600021   4

...................
请问怎么办呀?才入门SAS求指导
关键词:股票代码 stkcd NUM 怎么办 求指导 股票代码
沙发
孤单的我们 发表于 2016-4-11 14:07:38 |只看作者 |坛友微信交流群
  1. data a;
  2.         input stkcd$;
  3. cards;
  4. 000004
  5. 000004
  6. 000004
  7. 000002
  8. 000002
  9. 000007
  10. 000007
  11. 600021
  12. 600021
  13. 600021
  14. ;
  15. run;

  16. data b;
  17.         set a ;
  18.         by stkcd notsorted;
  19.         if first.stkcd then new+1;
  20. run;
复制代码

使用道具

藤椅
赵天静 学生认证  发表于 2016-4-11 14:43:48 |只看作者 |坛友微信交流群
孤单的我们 发表于 2016-4-11 14:07
能不能再问您一下 我写的宏为什么一直循环没有停止呀?我明明写了%end

%macro ma;                                                                                                                                                                                                                                                      
  %do num=1 %to 2223;                                                                                                                                                                                                                                          
      data t4_1;                                                                                                                                                                                                                                                
        set t3;                                                                                                                                                                                                                                                
        RETAIN Mretwd_sum 0;                                                                                                                                                                                                                                    
        last60=lag60(Mretwd);                                                                                                                                                                                                                                   
        if count gt 60 then Mretwd_sum=sum(Mretwd_sum,Mretwd,-last60);                                                                                                                                                                                          
        else Mretwd_sum=sum(Mretwd_sum,Mretwd);                                                                                                                                                                                                                                                                                                                     
      run;                                                                                                                                                                                                                                                      
  %end;                                                                                                                                                                                                                                                         
%mend;

使用道具

板凳
孤单的我们 发表于 2016-4-11 14:54:11 |只看作者 |坛友微信交流群
赵天静 发表于 2016-4-11 14:43
能不能再问您一下 我写的宏为什么一直循环没有停止呀?我明明写了%end

%macro ma;                    ...
这个循环有什么意义吗?执行了2223次一样的操作,应该是循环的次数太多。

使用道具

报纸
赵天静 学生认证  发表于 2016-4-11 15:09:22 |只看作者 |坛友微信交流群
孤单的我们 发表于 2016-4-11 14:54
这个循环有什么意义吗?执行了2223次一样的操作,应该是循环的次数太多。
想对每一只股票都求一次移动平均。。一共有2333只股票
就想 在new=1的里面,做一次if;在new=2里面,做一次if。。。。。。。在new=2223里面,做一次if

使用道具

地板
孤单的我们 发表于 2016-4-11 16:25:19 |只看作者 |坛友微信交流群
赵天静 发表于 2016-4-11 15:09
想对每一只股票都求一次移动平均。。一共有2333只股票
就想 在new=1的里面,做一次if;在new=2里面,做 ...
  1. proc sql noprint;
  2.         select distinct stkcd into:stkcd1-:stkcd2333 from have group by stkcd;
  3. quit;

  4. %macro ma;
  5.         %do num=1 %to 2223;
  6.                 data t4_#
  7.                         set t3(where=(stkcd="&&stkcd&i"));
  8.                         ……
  9.                         ……
  10.                 run;
  11.         %end;
  12. %mend;
复制代码

使用道具

7
赵天静 学生认证  发表于 2016-4-11 23:32:21 |只看作者 |坛友微信交流群
孤单的我们 发表于 2016-4-11 16:25
可不可以只要生成一个表啊?
而且前面的sql语句报错 from后面的have group报错

使用道具

8
孤单的我们 发表于 2016-4-12 09:42:50 |只看作者 |坛友微信交流群
赵天静 发表于 2016-4-11 23:32
可不可以只要生成一个表啊?
而且前面的sql语句报错 from后面的have group报错
have是你的数据集名
  1. %macro ma;
  2. %if sysfunc(exist(want,data)) %then %do;
  3. proc sql noprint;
  4.     drop table want;
  5. quit;
  6. %end;
  7.         %do num=1 %to 2223;
  8.                 data want;
  9.                         set %if sysfunc(exist(want,data)) %then want; t3(where=(stkcd="&&stkcd&i"));
  10.                         ……
  11.                         ……
  12.                 run;
  13.         %end;
  14. %mend;
复制代码

使用道具

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

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

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

GMT+8, 2024-4-25 12:13