楼主: xyfern
4975 11

[问答] 如何在SAS中批量导入不同文件夹下的同名TXT文件 [推广有奖]

  • 3关注
  • 0粉丝

大专生

53%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
847 点
帖子
35
精华
0
在线时间
34 小时
注册时间
2014-9-17
最后登录
2020-4-15

楼主
xyfern 学生认证  发表于 2016-6-6 23:28:21 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
CSMAR数据库中下载数据可以保存为SAS中使用的TXT格式,但是由于每次下载有字段限制(300000条数量限制),这次我下载的是比较大的数据库,结果分成了26段下载。
现在下下来分成26个压缩包,而且根据CSMAR数据库的命名规则,压缩包里的txt文件全部是同名的,我只能分别解压到不同文件夹,好在文件夹的命名有规则:stock price1,stock price2……stock price26;

现在我需要将它们批量导入到sas中,避免同名导致覆盖前面的数据,请问我应该怎么做呢?


二维码

扫码加我 拉你入群

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

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

关键词:不同文件夹 批量导入 文件夹 txt Price 文件夹 如何

回帖推荐

QDQ_tutu 发表于8楼  查看完整内容

没注意是txt,就在你原程序前后加上个循环,循环定义的宏变量a作为你 文件夹名stock price的数字部分 就可以批量导入了

沙发
在职认证  发表于 2016-6-7 03:05:25
26个分别导入也不是很费事啊,导入之后合并就行了。你是想用一个code直接导入所有的26个表吗?

藤椅
QDQ_tutu 发表于 2016-6-7 10:21:20
  1. %macro daoru(n);
  2. %do a=1 %to &n.;
  3. libname stock&a. "d:/shi/stock price&a.";
  4. data biao&a.;
  5. set stock&a.biao;
  6. run;
  7. %end;
  8. %mend;
  9. %daoru(26);
复制代码


用这个,括弧里参数就是你表的个数, 然后再合表就行了 如果表太多就再用个循环合并

板凳
xyfern 学生认证  发表于 2016-6-7 10:51:17
雯 发表于 2016-6-7 03:05
26个分别导入也不是很费事啊,导入之后合并就行了。你是想用一个code直接导入所有的26个表吗?
是这样的,因为刚好遇到这种问题,所以想学习一下批量导入的方法。假如最后确实没有别的办法,我只能考虑分别导入。
而且分别导入有一个比较麻烦的问题是,由于CSMAR下载后的文件名一致,其SAS代码中的路径中引用文件名也是一样的~也就是说导入SAS中的表命名一样,并且由于这个原因无法覆盖前面已导入的数据,必须进行重命名……工作量相对繁琐且无意义

报纸
xyfern 学生认证  发表于 2016-6-7 10:52:43
QDQ_tutu 发表于 2016-6-7 10:21
用这个,括弧里参数就是你表的个数, 然后再合表就行了 如果表太多就再用个循环合并
谢谢辛苦解答,我运行了一下代码,发现不能使用,在libname引入路径中,它会具体到目录下的文件名(要导入的数据),故这段代码是无法导入数据的。

地板
QDQ_tutu 发表于 2016-6-7 10:58:02
xyfern 发表于 2016-6-7 10:52
谢谢辛苦解答,我运行了一下代码,发现不能使用,在libname引入路径中,它会具体到目录下的文件名(要导入 ...
你只是存储的文件夹名字不同对吧,循环只是用一个宏变量代替你存储的文件夹的名字的一部分。其他的按正常导入文件的方式就可以了

7
xyfern 学生认证  发表于 2016-6-7 11:15:32
QDQ_tutu 发表于 2016-6-7 10:58
你只是存储的文件夹名字不同对吧,循环只是用一个宏变量代替你存储的文件夹的名字的一部分。其他的按正常 ...
也就是说我继续在后面补充具体的文件名吗?因为一般的操作(单个导入)是这样的:

DATA TRD_Dalyr (Label="");
Infile 'D:\GTA_SAS\TRD_Dalyr.txt' encoding="utf-8" delimiter = '09'x Missover Dsd lrecl=32767 firstobs=2;
Format Stkcd $6.;
Format Trddt $10.;
Format Adjprcwd 14.;
Format Markettype 10.;
Informat Stkcd $6.;
Informat Trddt $10.;
Informat Adjprcwd 14.;
Informat Markettype 10.;
Label Stkcd="证券代码";
Label Trddt="交易日期";
Label Adjprcwd="考虑现金红利再投资的收盘价的可比价格";
Label Markettype="市场类型";
Input Stkcd $ Trddt $ Adjprcwd Markettype ;
Run;

这里没有更改储存路径,仅仅是放上来方便大家看。蓝色字体表示需要具体到文件名的数据集,我是直接在你的代码下增加这个就可以了吗?

8
QDQ_tutu 发表于 2016-6-7 14:01:36
xyfern 发表于 2016-6-7 11:15
也就是说我继续在后面补充具体的文件名吗?因为一般的操作(单个导入)是这样的:

DATA TRD_Dalyr (La ...
  1. %macro daoru(n,e);
  2. %do a=1 %to &n.;

  3. DATA TRD_Dalyr_&a. (Label="");
  4. Infile "d:\stock price&a.\&e."
  5. encoding="utf-8" delimiter = '09'x Missover Dsd lrecl=32767 firstobs=2;
  6. /*Format Stkcd 6.;FormatTrddt10.;*/
  7. /*Format Adjprcwd 14.;*/
  8. /*Format Markettype 10.;*/
  9. /*Informat Stkcd 6.;InformatTrddt10.;*/
  10. /*Informat Adjprcwd 14.;*/
  11. /*Informat Markettype 10.;*/
  12. /*Label Stkcd="证券代码";*/
  13. /*Label Trddt="交易日期";*/
  14. /*Label Adjprcwd="考虑现金红利再投资的收盘价的可比价格";*/
  15. /*Label Markettype="市场类型";*/
  16. /*Input Stkcd Trddt Adjprcwd Markettype ;*/
  17. Run;
  18. %end;
  19. %mend;
  20. %daoru(5,TRD_Dalyr.txt);
复制代码
没注意是txt,就在你原程序前后加上个循环,循环定义的宏变量a作为你 文件夹名stock price的数字部分 就可以批量导入了

9
QDQ_tutu 发表于 2016-6-7 14:04:32
xyfern 发表于 2016-6-7 11:15
也就是说我继续在后面补充具体的文件名吗?因为一般的操作(单个导入)是这样的:

DATA TRD_Dalyr (La ...
不知道我理解的对不对,是不是你想要的,你试试吧

10
xyfern 学生认证  发表于 2016-6-7 18:36:18
QDQ_tutu 发表于 2016-6-7 14:01
没注意是txt,就在你原程序前后加上个循环,循环定义的宏变量a作为你 文件夹名stock price的数字部分 就可 ...
非常感谢,我的问题解决了,很实用。
但是就是设置格式那一段不能写成解释语句,直接使用CSMAR下载文件的源代码就可以了,修改后运行代码如下:
  1. %macro daoru(n,e);
  2. %do a=1 %to &n.;
  3. DATA TRD_Dalyr_&a. (Label="");
  4. Infile "D:\stock price&a.\&e."
  5. encoding="utf-8" delimiter = '09'x Missover Dsd lrecl=32767 firstobs=2;
  6. Format Stkcd $6.;
  7. Format Trddt $10.;
  8. Format Adjprcwd 14.;
  9. Format Markettype 10.;
  10. Informat Stkcd $6.;
  11. Informat Trddt $10.;
  12. Informat Adjprcwd 14.;
  13. Informat Markettype 10.;
  14. Label Stkcd="证券代码";
  15. Label Trddt="交易日期";
  16. Label Adjprcwd="考虑现金红利再投资的收盘价的可比价格";
  17. Label Markettype="市场类型";
  18. Input Stkcd $ Trddt $ Adjprcwd Markettype ;
  19. Run;
  20. %end;
  21. %mend;
  22. %daoru(5,TRD_Dalyr.txt);
复制代码


谢谢你的热心帮助,已设为精彩回答。:)

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 23:33