3

Suppose I have a varying number of datasets in my work environment, but all of which start with a similar name: name_abc, name_efg, name_1ky, etc. The datasets have the same variables and characteristics, and I want to set them all into one dataset.

data bigdataset;
    set [all datasets that begin with name_];
run;

Is there a way I can do this in SAS without typing all the datasets? I need this to be flexible with the number of datasets available in work environment.

4

3 回答 3

5

使用变量名通配符:

data bigdataset;
 set name_:;
run;

变量名称前缀后面的冒号选择名称以该前缀开头的任何变量。冒号的这种能力以及一些简单的命名标准使程序员能够更好地管理临时变量,更快地格式化许多变量,确定未知数量的变量,清理宏生成的数据集,并缩短各种 PROCS 的代码。例如

data ADLB;
set  lb:;

此 DATA 步骤读取 WORK 库中以 LB 开头的所有数据集。此外,当程序员编写此步骤时,他/她不需要知道读取了多少数据集,只需要他/她想读取具有特定前缀的所有数据集。冒号和破折号列表也适用于 MERGE 语句。

引用自有效使用 SAS 冒号

于 2015-04-09T19:26:51.833 回答
1

无论数据集是否具有公共前缀,这都将起作用。当然,对于您的情况,COLON修饰符是一个非常好的解决方案。

PROC SQL noprint;
    SELECT CATS(libname,".",memname) into :DSNS separated by " "
    FROM DICTIONARY.TABLES 
    WHERE UPCASE(LIBNAME)="YOUR_LIBNAME";
QUIT;
%Put DATA SETS: &DSNS;

Data BIGDATASET;
    Set &dsns;
Run;
于 2015-04-10T12:31:20.047 回答
0

您可以使用冒号修饰符,例如下面将组合 sashelp 库中以 prdsal 开头的所有数据集:

data all ;
 set sashelp.prdsal: ;
run;
于 2015-04-09T19:30:31.940 回答