我有sas数据集,并试图导出到csv。它包含大约5000列,每个列都需要导出。但是,当我导出数据时,所有行都包括在内,但只包括了大约2000的列名。有谁知道如何在这里包含所有的列名吗?我查了一些关于Lrecl可能有帮助的东西,但我不知道如何应用到列名。
发布于 2019-11-13 20:43:37
不需要使用PROC导出来编写分隔文件。要编写数据,可以使用一个简单的数据步骤。
data _null_;
set mydata ;
file "myfile" dsd ;
put (_all_) (+0);
run;要包含标题行,您需要做更多的工作。
首先,获取变量列表,并使用它写入标题行。
proc transpose data=mydata(obs=0) out=names;
var _all_;
run;
data _null_;
file "myfile" dsd ;
set names;
put _name_ @ ;
run;然后,可以在附加实际数据的步骤中使用FILE语句的MOD选项。
data _null_;
set mydata ;
file "myfile" dsd mod;
put (_all_) (+0);
run;请确保设置的记录长度足够长,足以容纳所有变量名。默认记录长度为32,767字节,仅为平均变量名留出足够的空间,使其为5个字符,并且仍然适合500个名称。将lrecl=500000选项添加到FILE语句中。过大的值不应该是一个问题,只要它不超过操作系统允许的SAS。一般来说,上限在1到1千万字符之间。
发布于 2019-11-14 00:02:59
使用具有大型EXPORT FILE=的fileref指定LRECL=。导出将根据LRECL设置剪辑一行(一行的最大字符数)。
示例:
data have;
do row = 1 to 10;
array my_column_name (5000) (1230001:1235000); * initialize the array with some large integers;
output;
end;
run;
* fileref for export. lines output will 'clip' output at 1,000,000 characters;
filename widefile 'c:\temp\my_wide_data.csv' lrecl=1000000;
proc export data=have dbms=csv replace file=widefile;
run;
filename widefile; * clear the fileref;系统选项LRECL由导出向导使用,并且系统LRECL设置不能超过32767 (并且LRECL的默认设置为32767)。这就是为什么剪切导出向导输出的原因。
https://stackoverflow.com/questions/58845201
复制相似问题