请选择 进入手机版 | 继续访问电脑版
楼主: congmu
4212 9

求问如何批量处理数据集 [推广有奖]

  • 2关注
  • 0粉丝

硕士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
3918 个
通用积分
24.1704
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1689 点
帖子
95
精华
0
在线时间
210 小时
注册时间
2012-10-25
最后登录
2023-7-9

congmu 发表于 2014-4-30 17:07:30 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我的逻辑库a里面是深沪2005年所有股票的高频数据,我需要沪深300指数的成分股作为样本进行操作,成分股的名字已经提取出来了,在一个数据集test中,名字为name。
1. 请问怎么在这个逻辑库a中把符合test数据集中name 的数据集都找出来放在另一个逻辑库b中,或者您告诉我应该用哪块的内容,我自己去查。
2. 我需要对每个股票的数据集进行相同的处理,共有251个股票的数据集,应该是用宏,但是就算用宏,我也要写251条。。。。有没有办法直接循环调用test数据集里的name进行处理?我查的资料好像是要用到call execute,这个好难,我使用的朱世武的书,不知道这本书有没有讲解这部分的,我没有找到。
谢谢
二维码

扫码加我 拉你入群

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

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

关键词:批量处理数据集 批量处理 处理数据 数据集 沪深300指数 如何

congmu 发表于 2014-4-30 17:30:50 |显示全部楼层 |坛友微信交流群
  1. %macro mergedate(stkloc,stk05loc,stk06loc);
  2. proc sql;
  3. create table midterm.&stkloc as
  4. select * from Ressk05.&stk05loc where date>=(09Sep2005)d
  5. union
  6. select * from Ressk06.&stk06loc where date<=(28Sep2006)d;
  7. %mend mergedate;
  8. %macro mergedate(stk_000001,stk05_000001,stk06_000001);
复制代码



代码是这样的,问题就是我需要对251个数据执行这个宏

使用道具

congmu 发表于 2014-4-30 19:23:13 |显示全部楼层 |坛友微信交流群
所有需要复制黏贴的文件的文件名存在一个txt文件test.txt中,这么把这些文件从D:\a中复制到D:\b中

使用道具

jeozu 发表于 2014-4-30 19:51:57 |显示全部楼层 |坛友微信交流群
问题描述不是特别清楚。
1。library A中的数据表是以股票名字(test.name)命名的吗?(每一只股票一个数据表)数据的周期(每天更新还是所有的历史数据都有?)
2。test.name与library A中数据表的名字一致?
3。library B中每支股票一个表格?保存所有历史数据?

使用道具

congmu 发表于 2014-4-30 20:37:36 |显示全部楼层 |坛友微信交流群
jeozu 发表于 2014-4-30 19:51
问题描述不是特别清楚。
1。library A中的数据表是以股票名字(test.name)命名的吗?(每一只股票一个数据 ...
所有需要复制黏贴的文件的文件名存在一个txt文件test.txt中,怎么把这些文件从D:\a中复制到D:\b中。

我最大的问题是不知道怎么在逻辑库中筛选出满足自己条件的数据集
test.name只有逻辑库a中一部分数据集的名字,名字是一样的,不知道怎么选出这些数据集

使用道具

crazygoing 发表于 2014-4-30 21:32:42 |显示全部楼层 |坛友微信交流群
congmu 发表于 2014-4-30 20:37
所有需要复制黏贴的文件的文件名存在一个txt文件test.txt中,怎么把这些文件从D:\a中复制到D:\b中。

...
如果你的逻辑库A里数据集的名字与 数据集test变量name的名字是一样的,那么下面这段代码可以帮你,默认输出到临时数据集:
  1. %macro cop;
  2. proc sql noprint;
  3. select count(*) into: num from test;
  4. select name into: namelist separated by ' ' from test;  
  5. %do i=1 %to &num;
  6. %let n_s=%scan(&namelist,&i,' ') ;
  7. data &n_s;set a.&n_s;
  8. run;
  9. %end;
  10. quit;
  11. %mend;
  12. %cop;
复制代码

使用道具

crazygoing 发表于 2014-4-30 21:34:28 |显示全部楼层 |坛友微信交流群
congmu 发表于 2014-4-30 17:30
代码是这样的,问题就是我需要对251个数据执行这个宏
你这个问题解决方法也可以借鉴楼上我写的那段代码,具体我就不写了。你看懂了就会了。

使用道具

congmu 发表于 2014-4-30 22:22:37 |显示全部楼层 |坛友微信交流群
crazygoing 发表于 2014-4-30 21:34
你这个问题解决方法也可以借鉴楼上我写的那段代码,具体我就不写了。你看懂了就会了。
非常感谢,我也发现了,都是一个问题

使用道具

CrazyKnight 发表于 2017-3-31 15:09:51 |显示全部楼层 |坛友微信交流群
congmu 发表于 2014-4-30 17:30
代码是这样的,问题就是我需要对251个数据执行这个宏
请问lz这个问题是如何解决的,本人sas初学者,还不是很理解“crazygoing”的回答。希望lz可以帮我解惑,万分感激!

使用道具

Soleilmay 发表于 2017-3-31 15:38:28 |显示全部楼层 |坛友微信交流群
第一題用sql子查詢可以簡單達到你的目的
proc sql;
     create table aa as
     select *
     from a
     where (aname in (select name from test)); quit;
aname指的是a dataset中的對應test name的相同欄位。
另外一部分,可以用Array 大量命名為a1-a251直接處理,然後之後做的時後改用do迴圈,可以少打點字。

使用道具

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

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

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

GMT+8, 2024-3-29 14:14