将数据分成不同的子集导致SAS

时间:2018-05-01 02:44:46

标签: sas

我有一个关于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年的文件,需要将它们分开。我只想自动化这个过程。

导致空间不足的可能原因是什么?

1 个答案:

答案 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)

另外,

  • 什么是操作系统和硬件?
  • 如果Windows是什么驱动器空间?
    • wmic logicaldisk list brief报告的内容是什么?
  • WORK libref的文件夹是什么?
  • 实际日志是什么?
  • 是否可以运行任何拆分步骤?