j**********e 发帖数: 442 | 1 各位大牛:
小弟有个问题。我有很多txt文件在一个folder中,每个文件都是固定格式。我想用SAS
读出每个文件第一行(比如下面的txt文件中的“000007”)和第四行(比如下面的txt文件中的“20011121”)的数据,然后合并为一份dataset,请大家出个主意。多谢
!
提供有用信息,我会发给包子,以表谢意。
比如说一个txt文件:
公司编号:000007
F_MEDIA:证券时报
标题:独立财务顾问报告
创建日期:20011121 |
x***x 发帖数: 3401 | 2 Set up a string variable to capture everything on each line.
then only keep records _n_=1 and _n_=4
Use a loop to read each file in the fold.
You can parse the information later. |
j**********e 发帖数: 442 | 3 大牛啊,可否给个详细点的code啊。您给个详细点的code我运行没问题了给您发20个包子以表谢意
【在 x***x 的大作中提到】 : Set up a string variable to capture everything on each line. : then only keep records _n_=1 and _n_=4 : Use a loop to read each file in the fold. : You can parse the information later.
|
x***x 发帖数: 3401 | 4 if you are not in a hurry, i can do it when i have time. could be 1-3
days.
包子以表谢意
【在 j**********e 的大作中提到】 : 大牛啊,可否给个详细点的code啊。您给个详细点的code我运行没问题了给您发20个包子以表谢意
|
j**********e 发帖数: 442 | 5 比较急,因为过两天开会想把最新结果present出来。如您在百忙之中抽点时间帮帮我
,将不胜感激!
【在 x***x 的大作中提到】 : if you are not in a hurry, i can do it when i have time. could be 1-3 : days. : : 包子以表谢意
|
D*A 发帖数: 811 | 6 如果你的txt文件名有规律,比如file_1 到 file_1000,可以用下面的macro。
其中 infile部分,file_1.txt 换成你的文件名。do loop里,num=1 %to 后换成你最
后一个文件的编号,前提是你的文件名字有规律。如果没有规律,就手动复制粘贴文件名替
换那个file_1.txt。从data 开始 run到quit;run; 不用loop开头和结尾。
大牛请帮指正如和整个fold不同名字的run。我看到有相应option,没来得及仔细研究。
我针对的格式是:
Company:000007
F_MEDIA:Stock times
Title:Independent Finance Report
Create Time:20011121
/* 20个包子,(200伪币呦),呵呵 */
/* Run following codes from here */
%macro input_file;
%do num=1 %to 1;
data file_sub;
infile 'C:\Documents and Settings\SHUOY\My Docu
【在 j**********e 的大作中提到】 : 比较急,因为过两天开会想把最新结果present出来。如您在百忙之中抽点时间帮帮我 : ,将不胜感激!
|
j**********e 发帖数: 442 | 7 多谢高手指教!
我已经给您转账了20包子(伪币)。之前不知道一个包子是10个伪币(包子的价格什么
地方能查到呢?),所以要是您要200伪币,我就破产了。实在不好意思啊。。。
件名替
究。
【在 D*A 的大作中提到】 : 如果你的txt文件名有规律,比如file_1 到 file_1000,可以用下面的macro。 : 其中 infile部分,file_1.txt 换成你的文件名。do loop里,num=1 %to 后换成你最 : 后一个文件的编号,前提是你的文件名字有规律。如果没有规律,就手动复制粘贴文件名替 : 换那个file_1.txt。从data 开始 run到quit;run; 不用loop开头和结尾。 : 大牛请帮指正如和整个fold不同名字的run。我看到有相应option,没来得及仔细研究。 : 我针对的格式是: : Company:000007 : F_MEDIA:Stock times : Title:Independent Finance Report : Create Time:20011121
|
j**********e 发帖数: 442 | 8 还有,请教一下如何指代宏变量。我的文件名为A(0),A(1),A(2)...
我尝试写成:
%do num=0 %to 10000;
infile 'C:\research\A(&num).txt';
可是SAS返回:
ERROR: Physical file does not exist, C:\research\A(&num).txt.
请大牛们看看错在哪里?多谢!
件名替
究。
【在 D*A 的大作中提到】 : 如果你的txt文件名有规律,比如file_1 到 file_1000,可以用下面的macro。 : 其中 infile部分,file_1.txt 换成你的文件名。do loop里,num=1 %to 后换成你最 : 后一个文件的编号,前提是你的文件名字有规律。如果没有规律,就手动复制粘贴文件名替 : 换那个file_1.txt。从data 开始 run到quit;run; 不用loop开头和结尾。 : 大牛请帮指正如和整个fold不同名字的run。我看到有相应option,没来得及仔细研究。 : 我针对的格式是: : Company:000007 : F_MEDIA:Stock times : Title:Independent Finance Report : Create Time:20011121
|
s******r 发帖数: 1524 | 9 大牛? 都不敢回了。
装着胆子回一下,
try
infile “C:\research\A(&num).txt“
【在 j**********e 的大作中提到】 : 还有,请教一下如何指代宏变量。我的文件名为A(0),A(1),A(2)... : 我尝试写成: : %do num=0 %to 10000; : infile 'C:\research\A(&num).txt'; : 可是SAS返回: : ERROR: Physical file does not exist, C:\research\A(&num).txt. : 请大牛们看看错在哪里?多谢! : : 件名替 : 究。
|
j**********e 发帖数: 442 | 10 您真是太谦虚了。这样确实就可以work了。给您发了20个伪币,聊表寸心。
有个问题是:根据上面的代码,在company和000007之间只能有:而不能有任何空格。有没有办法允许在:后有空格呢?
我才搞清楚,原来是中文的问题。中文一个字占两格,所以在读取冒号后面的值时有困难(到底为啥困难我也不明白)。我把冒号删除了然后在英文输入法环境下再添上冒号就可以了。但是文件太多,一个一个这样弄太费时间。大家有好办法吗?
附上整个宏(测试用,所以num只从0到1):
%macro input_file;
%do num=0 %to 1;
data file_sub;
infile "C:\research\A (&num).txt"
firstobs=1
delimiter=":" truncover;
input col_1 $20. ;
n=_N_;
if n=1 then company=scan(col_1,2,':');
retain company;
if n=4 then date=in |
|
|
s*******y 发帖数: 2977 | 11 真佩服那些拿着sas可以做任何事的牛人。读文件用Perl的话,几行code就解决了。 |
j**********e 发帖数: 442 | 12 恭请老大科普一下Perl(主要用途,主要参考书,tutorial),让小弟学习学习。多谢!
【在 s*******y 的大作中提到】 : 真佩服那些拿着sas可以做任何事的牛人。读文件用Perl的话,几行code就解决了。
|
s******r 发帖数: 1524 | 13 try
compress(scan(col_1,2,':'));
instead of scan only
有没有办法允许在:后有空格呢?
困难(到底为啥困难我也不明白)。我把冒号删除了然后在英文输入法环境下再添上冒
号就可以了。但是文件太多,一个一个这样弄太费时间。大家有好办法吗?
【在 j**********e 的大作中提到】 : 您真是太谦虚了。这样确实就可以work了。给您发了20个伪币,聊表寸心。 : 有个问题是:根据上面的代码,在company和000007之间只能有:而不能有任何空格。有没有办法允许在:后有空格呢? : 我才搞清楚,原来是中文的问题。中文一个字占两格,所以在读取冒号后面的值时有困难(到底为啥困难我也不明白)。我把冒号删除了然后在英文输入法环境下再添上冒号就可以了。但是文件太多,一个一个这样弄太费时间。大家有好办法吗? : 附上整个宏(测试用,所以num只从0到1): : %macro input_file; : %do num=0 %to 1; : data file_sub; : infile "C:\research\A (&num).txt" : firstobs=1 :
|
j******o 发帖数: 127 | |
z**k 发帖数: 378 | 15 hahaha, i just went from Perl to Python ~~~~
【在 s*******y 的大作中提到】 : 真佩服那些拿着sas可以做任何事的牛人。读文件用Perl的话,几行code就解决了。
|
j**********e 发帖数: 442 | 16 Perl和Python,请高手科普一下,让小弟也学习学习
【在 z**k 的大作中提到】 : hahaha, i just went from Perl to Python ~~~~
|
j**********e 发帖数: 442 | 17 谢谢指教。今天早上我用了批量改字符串的文件把冒号给改了。
祝scimitar兄面试顺利!
【在 s******r 的大作中提到】 : try : compress(scan(col_1,2,':')); : instead of scan only : : 有没有办法允许在:后有空格呢? : 困难(到底为啥困难我也不明白)。我把冒号删除了然后在英文输入法环境下再添上冒 : 号就可以了。但是文件太多,一个一个这样弄太费时间。大家有好办法吗?
|
j**********e 发帖数: 442 | 18 谢谢jackdiao
【在 j******o 的大作中提到】 : This paper may be helpful. : http://www2.sas.com/proceedings/sugi29/057-29.pdf
|
l*********s 发帖数: 5409 | 19 glad I don't have to deal with Chinese characters yet. |