如何在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 表2: A B D E F 表3: B D E如何在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
我想这就是你要找的。这会将表合并在一起,并记录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万次因多种标准而被消除。我相信,经过一段时间和大量的编码,他们本可以做到这一点——这确实会有很大帮助。所以为了回答你的问题,我想追溯一下这些东西被删除的位置和原因。