我已将SAS数据集导出到.txt文件中。如何获取所有这些文本文件的名称和记录数?这是为了创建一个表/报告,显示哪些SAS数据集导出到文本文件以及每个文本文件有多少条记录。如果这些文件是SAS数据集但我在.txt文件上找不到任何内容,我知道如何做类似的事情。
SAS中的导出过程会生成导出结果和每个文件中的记录数。但我正在为40-50个国家/地区的多个文件进行导出。所以我无法查看导出日志的每一行来确定多个文件的名称和记录计数。打开每个文件以获取记录计数不是一个选项:)
我需要有一个报告,最好是以表格格式列出导出的文本文件的名称和每个文件的记录计数。
感谢Chris,感谢您的建议和代码。但是没有主数据集。让我再解释一下我的问题:
Country A has 10 different SAS datasets - Adata01.sas7bdat....Adata10.sas7bdat
Country B has 15 different SAS datasets - Bdata02.sas7bdat...Bdata15.sas7bdat
...and so on.
我需要将每个数据集导出为带有UTF8编码的文本文件 - 我已经完成了。所以,现在我有:
Country A - Adata01.txt, Adata02.txt....Adata10.txt
Country B - Bdata02.txt, Bdata03.txt...Bdata15.txt
我能想到的一个选项是 - 扫描导出日志,只提取文本文件的名称和写入文本文件的记录数。我想要的是:
Sas Data Exported Text Data # of Records
Adata01.sas7bdat Yes Adata01.txt 8000
这样做的好方法吗?
答案 0 :(得分:1)
如果您愿意接受SAS关于它输出了多少记录的信息(即信任日志),您可以解析日志。以下是一个例子;它可能适用于您的确切情况,也可能不适用,但它应该是一个有用的指南。
proc printto log="d:\temp\log.txt" new; *put log out to a file somewhere;
run;
*here is your proc export;
proc export data=sashelp.class outfile="d:\temp\test.txt" dbms=tab replace;
run;
proc printto;
run;
data log_parse;
infile "d:\temp\log.txt"; *your log file;
input @; *open for input;
if find(_infile_,'were written') then do; *if we are on the right line;
input
@"NOTE: " records /*@"str" is a useful kind of input here */
@"the file " filename :$50. /*"the file " is in case you have 'file' in your filename. You may want to parse this further (for example, remove quotes)*/
;
output;
end;
run;
答案 1 :(得分:0)
我不熟悉SAS数据集,但是,这里有一些想法,假设您无法从SAS中获取导出详细信息。但希望这些信息可用,有人会告诉你如何获得它。
如果不是,这是一个非常简单的解决方案: 如果导出每个项目包含1行数据,则只需打开文件并计算行数。 要计算导出数据集的数量,请使用temp文件夹进行导出,然后获取文件夹中文件的计数。当你计算它们时,将它们移动到人们期望它们的文件夹(所以你不计算它们两次)。
有了这个,你就有了每个导出文件的名称,每个文件的行数(即导出的项目数),位置(因为你将它移出temp,你知道你移动它的位置),以及如何许多人都是在这个过程中出口的。
我在这里做了一些简单的假设。假设以上都不合适,请发布更多详细信息,您将获得更多建议。
答案 2 :(得分:0)
为什么不从创建文本文件的SAS数据集中获取#记录?
假设您将每个国家/地区的所有记录导出到每个国家/地区的文本文件中,您只需在主数据集上按国家/地区proc freq
进行操作即可。这将给出每个国家/地区输出文件中的#记录。
/* Generate counts by country */ proc freq data=master noprint ; table COUNTRY /out=f_countries ; run ; data _null_ ; set f_countries end=eof ; call symputx(cats('CTRY',_n_),COUNTRY) ; if eof then call symputx('CTRYN',_n_) ; run ; %MACRO EXPORT_LOOP ; %DO I = 1 %TO &CTRYN ; proc export data=master (where=(COUNTRY="&&CTRY&I")) outfile="c:\Country &&CTRY&I...txt" dbms=tab ; run ; %END ; %MEND ; %EXPORT_LOOP ; title "Record counts by Country, output file = c:\Country <country>.txt" ; proc report data=f_countries ; run ;