如何从SAS中的几个表中检查何时消除观察结果

时间:2015-03-04 15:22:42

标签: sas

我正在运行一个逐步的程序,某些标准会从表中删除记录。但是,记录可以在第7个表或第8个表之后消除,所以我一直在这样做,将表1与2合并,然后将表2与3合并,依此类推,这不是很方便。有没有办法可以追踪"用旗帜观察?比如说,如果A在表1中,则匹配= 1 else匹配= 0.并从那里,确定从哪个表A中消除(在本例中为表3)。我需要一次跟踪可能的多个观察结果(不是太多,可能是5或10),它们可能在不同的点被消除(表3中的一个,表8中的一个)。

示例:

表1:

Pat_ID

A

C

d

电子

˚F

表2:

A

d

电子

˚F

表3:

d

电子

˚F

2 个答案:

答案 0 :(得分:3)

我认为这就是你要找的东西。这会将表合并在一起并记录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

答案 1 :(得分:0)

当你删除这些记录时,它们去了哪里?几年前我共同写了一篇论文,认为每次删除记录时,都应该将它们写入已删除记录的数据集中。这样可以更轻松地跟踪删除的记录,步骤和原因。

例如:

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

完整的论文可在此处找到:http://www.lexjansen.com/nesug/nesug11/ds/ds06.pdf