按照某个字段将SAS数据集导出多个数据集

以sashelp中的cars数据集为例,如果我们需要按照origin字段将数据分别导出到origin_asia,origin_europe,origin_usa三个数据集,我们采用以下代码:

data _null_; set sashelp.cars; call execute('data origin_'‖origin‖'; set sashelp.cars(where = (origin = ''‖origin‖'')); run;'); run;

该方法比较灵活,不需要知道origin字段有哪些值,可以直接将数据导入到对应的数据集,但同时也有效率低的问题。cars数据集有428条观测,所以call execute语句会执行428次。因为origin有3个取值,所以有425次都是在重复执行。下面我们采用first.语句进行优化,仅在origin值首次出现时执行call execute语句,具体如下:

proc sort data = sashelp.cars out = cars_sorted; by origin; run;data _null_;    set cars_sorted;        by origin;        if first.origin then                     do;                                call execute('data origin_'‖origin‖'; set cars_sorted(where = (origin = ''‖origin‖'')); run;');                     end;run;12345678910111234567891011

在排序后使用first.语句,这样call execute语句只会被执行3次,有效提高了效率。总结:此方法非常灵活有效,对于一般的导出多个数据集的问题都可以轻松解决,但是如果导出多个数据集后需要合并则该方法就会失效,因为该方法并不能对导出后的数据集进行操作。假如需要对导出后的多个数据集进行合并,则要考虑使用宏方案。

此方法来自微信SAS Programmer技术交流群网友攀攀攀攀攀√

(0)

相关推荐