我有两个数据集。第一个是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 SQL
和SEPARATED 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;