楼主: harlon1976
3365 4

如何提取各个股票代码对应的数据到数据集 [推广有奖]

  • 2关注
  • 27粉丝

版主

院士

49%

还不是VIP/贵宾

-

威望
1
论坛币
37273 个
通用积分
100.0959
学术水平
25 点
热心指数
39 点
信用等级
17 点
经验
58976 点
帖子
1898
精华
0
在线时间
4213 小时
注册时间
2005-8-27
最后登录
2024-4-26

100论坛币
l请问论坛高手:假设有一个数据集,有三个变量,一个是股票的代码,另一个是收盘价和日期,分别记为dm,spj date,并且事先知道这个数据集中股票的所有代码取值,例如有三个股票,代码是000001、000002、000003。虚拟数据集如下:
dm           spj          date
000001   10.2       2016-01-02
000001   10.3       2016-01-03
000001   10.7       2016-01-04
000002   9.2        2016-01-02
000002   9.3        2016-01-03
000002   9.7        2016-01-04
000004   8.2        2016-01-02
000004   8.3        2016-01-03
000004   8.7        2016-01-04
现在的问题,如何通过编程把各自股票代码指定观测输出到各自的数据集中,最好比如以字母a开头,以股指代码为后缀形成数据集命名。例如上述数据集内容就要形成数据a000001、a000002、a000004。期待大神指导!
关键词:如何提取 股票代码 数据集 date ATE 珊瑚岛
沙发
liujunhzau524 发表于 2017-2-27 21:12:24 |只看作者 |坛友微信交流群
  1. proc sort data=test;
  2. by dm;
  3. run;
  4. data test1 ;
  5. set test;
  6. by dm;
  7. if first.dm then num+1;
  8. run;
  9. proc sql noprint;
  10.   select max(num) into:num  from test1;
  11. quit;

  12. %macro exportfile(ds,n);
  13.            %do i=1 %to &n;
  14.               data tmp&i (drop=num);
  15.                      set &ds;
  16.                          where num=&i;
  17.                   run;
  18.                   proc sql noprint;
  19.                     select distinct(dm) into :filename from tmp&i;
  20.           quit;
  21.           %put &filename;
  22.                   proc export data=tmp&i dbms=dlm replace outfile="d:tmp&filename..txt";
  23.                   run;
  24.            %end;
  25. %mend exportfile;
  26. %exportfile(test1,&num);
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

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

使用道具

藤椅
hplcdadong 发表于 2017-2-27 23:26:27 |只看作者 |坛友微信交流群
*Assume your dataset name is "have";

proc sql;
select distinct dm into:key separated by ' '
from have;
quit;


%macro dist;
%do i=1 %to %sysfunc(countw(&key));
%let hat=%scan(&key,&i);               
data a&hat;
set have;
where dm="&hat";
run;
proc export outfile="C:\a&hat..CSV" DBMS=CSV replace;    /*optional: export all these files */
run;
%end;
%mend;

%dist



使用道具

板凳
wwang111 发表于 2017-2-28 08:22:04 |只看作者 |坛友微信交流群
proc sql;
create table dmlist as
select distinct dm from test;
quit;

data _null_;
set dmlist;
call execute('data a'||strip(dm)||'; set test; where dm='||quote(strip(dm))||';run;');
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

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

使用道具

报纸
zwnSAS121 发表于 2017-2-28 10:50:45 |只看作者 |坛友微信交流群
wwang111 发表于 2017-2-28 08:22
proc sql;
create table dmlist as
select distinct dm from test;
感觉你非常是擅于用call execute语句啊

使用道具

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

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

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

GMT+8, 2024-4-27 07:57