【发布时间】:2020-12-18 16:31:58
【问题描述】:
我有一个包含诊断记录的数据集,即使对于相同的代码,患者也可以有一个或多个记录。我无法使用按变量“代码”分组,因为它显示的错误类似于 ID 值“code_v58”在同一个 BY 组中出现两次。
data have;
input id rand found code $;
datalines;
1 101 1 001
2 102 1 v58
2 103 0 v58 /* second diagnosis record for patient 2 */
3 104 1 v58
4 105 1 003
4 106 1 003 /* second diagnosis record for patient 4 */
5 107 0 v58
;
Desired output:
Obs id code_001 code_v58 code_003
1 1 1 . .
2 2 . 1 . /* second diagnosis code's {v58} status for patient 2 is 1, so it has to be taken*/
3 3 . 1 .
4 4 . . 1
5 5 . 0 .
当我尝试使用像 [this] 这样的 let 语句时,
proc transpose data=temp out=want(drop=_name_) prefix=code_ let;
by id;
id code; * column name becomes <prefix><code>;
var found;
run;
我得到如下输出:
Obs id code_001 code_v58 code_003
1 1 1 . .
2 2 . 0 .
3 3 . 1 .
4 4 . . 1
5 5 . 0 .
我尝试了this 并修改了 PROC TRANSPOSE 以在 BY 语句中使用 ID 和计数
proc transpose data=temp out=want(drop=_name_) prefix=code_;
by id count;
id code; * column name becomes <prefix><code>;
var found;
run;
得到如下输出:
Obs id count code_001 code_v58 code_003
1 1 1 1 . .
2 2 1 . 1 .
3 2 2 . 0 .
4 3 1 . 1 .
5 4 1 . . 1
6 4 2 . . 1
7 5 1 . 0 .
如果在任何记录中找到重复的患者 ID,我可以知道如何删除重复的患者 ID 并将代码更新为 1 吗?
【问题讨论】:
-
当你有重复时你想要什么输出?正在删除正确答案,或者该列应该有 2 还是应该重复(即 code_v58_1 code_v58_2)。如果您只想删除它们,请使用 PROC SORT 和 NODUPKEY 根据需要删除任何重复项。
-
当您有重复的代码和不同的发现标志时,应该选择哪个发现值 (0/1) 进行转置?第一个,最后一个,还是第一个?
-
@Reeza 如果存在重复项,我只需要保留该代码的存在,即仅用于 found=1
-
@Richard 我只需要选择 found=1。也就是说,只要患者有该特定代码的历史,我只需要获得一次诊断代码 =1。所以先找到=1就够了。