我有一个关于15G的单个文件,有2年的数据。我尝试使用以下部分SAS代码将两年分成两个不同的文件。比如,中间处理的数据称为A_20112012_xxx,分隔的数据为B_2011_xxx,B_2012_xxx。
%let column = years;
proc sql noprint;
select distinct
cat ("data B", &column., "xxx;"
, "set A_20112012_xxx;"
, "where &column=", &column., ";"
, "run;"
)
into :SplitSteps separated by ";"
from A_20112012_xxx;
quit;
&SplitSteps;
尽管将它们逐个分开是没有问题的,但如果按照上述方式进行操作,它总会导致错误消息没有足够的空间。这样做的原因是存在超过2年的文件,需要将它们分开。我只想自动化这个过程。
导致空间不足的可能原因是什么?
答案 0 :(得分:2)
在用猫处理完所有行之前,可能不会发生明显的操作。这意味着在删除不同操作的重复项之前,您的内部临时资源具有大量行(按照15G表)并具有宽cat结果(默认长度为200个字符)。
尝试将不同的选择移动到from
%let column = years;
proc sql noprint;
select
cat ("data B", &column., "xxx;"
, "set A_20112012_xxx;"
, "where &column=", &column., ";"
, "run;"
)
into :SplitSteps separated by ";"
from (select distinct &column from A_20112012_xxx)
;
quit;
&SplitSteps;
有时为了清晰起见,模块化更好
%macro data_fracker (data=, column=);
%macro split_for (value);
data B_&value._xxx;
set &data;
where &column = &value;
run;
%mend;
%local dispatch;
proc sql noprint;
select cats('%split_for(', &column, ')')
into :dispatch separated by ' '
from (select distinct &column from &data)
;
quit;
&dispatch
%mend;
%data_fracker (data=sashelp.class, column=age)
另外,
wmic logicaldisk list brief
报告的内容是什么?