SAS—只保留列列在单独的数据集中



我有两个数据集。第一个是big_dataset,大约有3000列,其中大部分从未使用过。第二个列column_list包含一个名为column_name的列,其值约为100。每个值都是我要保留的列的名称。

我想过滤big_dataset,以便只保留column_list中的列,而丢弃其余列。

如果我在Python中使用Pandas数据帧,这将是一项微不足道的任务:

cols = column_list['column_name'].tolist()
smaller_dataset = big_dataset[cols]

然而,我想不出SAS的等价物。Proc Transpose不允许我将行转换为标题。我无法在数据步骤中找到一个语句来实现这一点,而且据我所知,Proc SQL无法处理这一点。我已经通读了Proc Datasets上的文档,但这似乎也不符合我的需求。

要从column_list中获取列列表以用于big_dataset,可以查询column_list表并将结果放入宏变量中。这可以通过PROC SQLSEPARATED BY子句实现:

proc sql noprint;
select column_name
into :cols separated by ','
from column_list;
create table SMALLER_DATASET AS
select &cols.
from WORK.BIG_DATASET;
quit;

或者,您可以使用SEPARATED BY ' ',然后在KEEP语句或数据集选项中使用结果列表:

proc sql noprint;
select column_name
into :cols separated by ' '
from column_list;
quit;
data small_dataset;
set big_dataset (keep=&cols.);
/* or keep=&cols.; */
run;

最新更新