过滤一个SAS数据集以包含列表中给出的标识符



我在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对于仅需一个小子集的大型数据集就更快了。

最新更新