如何在SAS中的多个表的哪个步骤中检查何时消除观测值

如何在SAS中的多个表的哪个步骤中检查何时消除观测值,sas,Sas,我正在运行一个程序,在这个程序中,某些条件逐步从表中删除记录。但是,在第7个表或第8个表之后可能会删除一条记录,所以我一直采用的方法,将表1与表2合并,然后将表2与表3合并,等等,都不是很方便。有没有办法用旗子“跟踪”观察结果?比如说,如果A在表1中,那么match=1,否则match=0。然后,确定从中删除了哪个表A(在本例中为表3)。我可能需要一次跟踪多个观测值(不是太多,可能是5或10个),它们可能在不同的点被消除(表3中的一个,表8中的一个) 例如: 表1: 帕特 A B C D E F

我正在运行一个程序,在这个程序中,某些条件逐步从表中删除记录。但是,在第7个表或第8个表之后可能会删除一条记录,所以我一直采用的方法,将表1与表2合并,然后将表2与表3合并,等等,都不是很方便。有没有办法用旗子“跟踪”观察结果?比如说,如果A在表1中,那么match=1,否则match=0。然后,确定从中删除了哪个表A(在本例中为表3)。我可能需要一次跟踪多个观测值(不是太多,可能是5或10个),它们可能在不同的点被消除(表3中的一个,表8中的一个)

例如:

表1:

帕特

A

B

C

D

E

F

表2:

A

B

D

E

F

表3:

B

D

E


我想这就是你要找的。这会将表合并在一起,并记录ID存在的表

编辑:在回答评论中的问题时,我意识到命名可能会令人困惑。我正在更改表名以使事情更清楚

data mick;
  input PAT_ID $ ;
datalines;
A
B
C
D
E
F
;
run;

data keith;
  input PAT_ID $ ;
datalines;
A
B
D
E
F
;
run;

data ron;
  input PAT_ID $ ;
datalines;
B
D
E
F
;
run;

/* merge */
data want(drop=i);
    merge mick (in=t1) 
          keith (in=t2)
          ron (in=t3);
    by PAT_ID;
    array table[3] Mick Keith Ron;
    array t[3];

    do i=1 to 3;
        if t[i] then table[i]=1;
        else table[i]=0;
    end;
run;
这就产生了

PAT_ID  Mick Keith Ron
A       1    1     0
B       1    1     1
C       1    0     0
D       1    1     1
E       1    1     1
F       1    1     1

当你删除这些记录时,它们去了哪里?几年前,我与他人共同撰写了一篇论文,认为无论何时删除记录,都应该将它们写入已删除记录的数据集。这使得跟踪哪些记录被删除、删除的步骤以及删除的原因变得更加容易

例如:

data table2
     drop_missingScore
  ;
  set table1;
  if missing(score) then output drop_missingScore;
  else output table2;
run;

全文可在此处查阅:

谢谢!如果表的名称完全不同,有没有办法做到这一点?我知道数组必须有序列号,所以最好的解决方案是将它们重命名为表1、表2等?数组不必对列进行编号。您可以使用
array blah[3]ab c指定数组中的变量名。创建引用列A、B和C的数组
BLAH
。使用新的表名更新示例,希望能帮助您更好地理解。您不需要数组或循环。t1、t2和t3已经是布尔值了。您可以让merge语句保持原样,然后只添加:Mick=t1;基思=t2;Ron=t3。@Quentin,如果有N个表,那么一个数组将比写出每个表更紧凑。但是是的,你可以做
table[i]=t[i]在循环中。我正在运行一个其他人编写的程序,但它不这样做。正如我从在其他程序上执行类似的过程中学到的,对于程序编写人员来说,这样做可能太复杂了(我不太确定)。可能有600万次观察,其中300万次因多种标准而被消除。我相信,经过一段时间和大量的编码,他们本可以做到这一点——这确实会有很大帮助。所以为了回答你的问题,我想追溯一下这些东西被删除的位置和原因。