我在SAS Enterprise指南中工作,并具有一个包含唯一标识符(ID_LIST)的一个列SAS表。
我想过滤另一个SAS表以仅包含在ID_LIST中可以找到的观测值。
到目前为止我的代码是:
proc sql noprint;
CREATE TABLE test AS
SELECT *
FROM data_sample
WHERE id IN id_list
quit;
此代码给我以下错误:
Error 22-322: Syntax error, expecting on of the following: (, SELECT.
我在做什么错?
感谢您的帮助。
您不能仅仅将其称为表名。您需要制作一个子查询,其中包括您希望它从id_list读取的变量。
CREATE TABLE test AS
SELECT *
FROM data_sample
WHERE id IN (select id from id_list)
;
您可以在proc sql
中使用JOIN,但使用in=
语句中的数据步骤中使用合并可能会更简单。
data want;
merge oneColData(in = A) otherData(in = B);
by id_list;
if A;
run;
您将两个数据集合并在一起,然后使用if A
您仅使用显示在单列数据集中的ID。为此,您必须在两个数据集中必须合并id_list
,并且两个数据集必须通过id_list
进行排序。
使用数据步骤而不是proc sql的问题是,对于数据,数据集必须在用于合并的变量上排序。如果尚未这样,则必须先对完整的数据集进行排序。
如果我有一个很大的SAS数据集,该数据集未在要合并的变量上排序,则必须先对其进行排序(这可能需要一段时间)。如果我在Proc SQL中使用副查询,则可以选择性地读取数据集,因此不需要排序。
我的赌注是,Proc SQL对于仅需一个小子集的大型数据集就更快了。