Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
筛选SAS数据集以仅包含列表中给定的标识符_Sas_Proc Sql - Fatal编程技术网

筛选SAS数据集以仅包含列表中给定的标识符

筛选SAS数据集以仅包含列表中给定的标识符,sas,proc-sql,Sas,Proc Sql,我在《SAS企业指南》中工作,有一个包含唯一标识符(id_列表)的单列SAS表 我想筛选另一个SAS表,使其仅包含可以在id_列表中找到的观察值 到目前为止,我的代码是: 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

我在《SAS企业指南》中工作,有一个包含唯一标识符(id_列表)的单列SAS表

我想筛选另一个SAS表,使其仅包含可以在id_列表中找到的观察值

到目前为止,我的代码是:

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.
我做错了什么


首先谢谢你的帮助

您可以在
procsql
中使用连接,但在带有
in=
语句的数据步骤中使用合并可能更简单

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

  if A;

run;

将两个数据集合并在一起,然后使用
(如果是
)只获取出现在单列数据集中的ID。为此,您必须在两个数据集中的
id\u列表
上进行合并,并且两个数据集必须按照
id\u列表
进行排序。您可以在
proc sql
中使用联接,但在数据步骤中使用带有
in=
语句的合并可能更简单

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

  if A;

run;

将两个数据集合并在一起,然后使用
(如果是
)只获取出现在单列数据集中的ID。为此,您必须在两个数据集中的
id\u列表
上进行合并,并且两个数据集必须按
id\u列表
进行排序。您不能只给它表名。您需要创建一个子查询,其中包含您希望它从ID_列表中读取的变量

CREATE TABLE test AS
  SELECT *
  FROM data_sample
  WHERE id IN (select id from id_list)
;

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

CREATE TABLE test AS
  SELECT *
  FROM data_sample
  WHERE id IN (select id from id_list)
;

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

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


我敢打赌,对于只需要一个小子集的大型数据集,PROC-SQL速度要快得多。

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

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


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

这看起来很棒。一个问题:如果我在otherData中有多个条目,它们都具有id_列表中相同的唯一id,那么它们是否都将保留在输出数据集中?是的,它们应该保留,这是一对多合并。如果有疑问,创建一个玩具数据集并检查它,这看起来很棒。一个问题:如果我在otherData中有多个条目,它们都具有id_列表中相同的唯一id,那么它们是否都将保留在输出数据集中?是的,它们应该保留,这是一对多合并。如果有疑问,创建一个玩具数据集,并检查它,我实际上结束了这个。安德鲁斯的回答给了我一些问题(这些问题肯定已经解决了)。多谢了,我真的就这样结束了。安德鲁斯的回答给了我一些问题(这些问题肯定已经解决了)。非常感谢。