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

时间:2017-02-20 19:25:19

标签: sas proc-sql

我正在使用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.

我做错了什么?

在前面感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

你不能只给它表名。您需要创建一个子查询,其中包含您希望从ID_LIST读取的变量。

def POST()
data = web.data()
for record in data...

答案 1 :(得分:1)

您可以在proc sql中使用联接,但在使用in=语句的数据步骤中使用合并可能更简单。

data want;
  merge oneColData(in = A) otherData(in = B);
  by id_list;

  if A;

run;

将两个数据集合并在一起,然后使用if A,您只获取单列数据集中显示的ID。要使其工作,您必须合并id_list,这必须在两个数据集中,并且两个数据集必须按id_list排序。

答案 2 :(得分:0)

使用数据步骤而不是PROC SQL的问题是,对于数据步骤,数据集必须在用于合并的变量上排序。如果不是这种情况,则必须首先对完整的数据集进行排序。

如果我有一个非常大的SAS数据集,它没有在要合并的变量上排序,我必须先对它进行排序(这可能需要相当长的时间)。如果我在PROC SQL中使用子查询,我可以有选择地读取数据集,因此不需要排序。

我敢打赌,对于只需要一小部分的大型数据集,PROC SQL要快得多。