我有跟踪某种眼睛现象的数据。有些患者双眼都有,有些患者只用一只眼睛。这是一些数据的样子:
EyeID PatientID STATUS Gender
1 1 1 M
2 1 0 M
3 2 1 M
4 3 0 M
5 3 1 M
6 4 1 M
7 4 0 M
8 5 1 F
9 6 1 F
10 6 0 F
11 7 1 F
12 8 1 F
13 8 0 F
14 9 1 F
从上面的数据可以看出,总共有9名患者,他们都在一只眼睛中有特殊现象。
我需要计算患有这种眼睛现象的患者数量。 为了获得数据集中的总患者数,我使用了:
PROC FREQ data=new nlevels;
tables PatientID;
run;
为了计算患有这种眼睛现象的患者数量,我使用了:
PROC SORT data=new out=new1 nodupkey;
by Patientid Status;
run;
proc freq data=new1 nlevels;
tables Status;
run;
然而,它给出了正确数量的患者现象(9),但没有正确的数字(0)。
我现在需要计算这种现象的性别分布。我用过:
proc freq data=new1;
tables gender*Status/chisq;
run;
然而,在交叉表中,它具有正确数量的具有现象(9)的患者,但没有正确的数字而没有(0)。有没有人对如何做这个卡方有任何想法,如果在至少一只眼睛中有这种现象,那么它们对这种现象是积极的吗?
谢谢!
答案 0 :(得分:1)
PROC FREQ
正在做你告诉它的事情:计算status=0
个案件。
一般来说,当你可能应该使用更精确的工具时,你会使用一些钝工具来完成你想要完成的任务。例如,PROC SORT NODUPKEY
有点矫枉过正,无论如何它并没有真正做到你想要的。
要设置有/不具有的数据集,例如,让我们做一些事情。首先,我再添加一行 - 实际上没有的人 - 所以我们看到它正在工作。
data have;
input eyeID patientID status gender $;
datalines;
1 1 1 M
2 1 0 M
3 2 1 M
4 3 0 M
5 3 1 M
6 4 1 M
7 4 0 M
8 5 1 F
9 6 1 F
10 6 0 F
11 7 1 F
12 8 1 F
13 8 0 F
14 9 1 F
15 10 0 M
;;;;
run;
现在我们使用数据步骤。我们想要一个患者级别的数据集,我们现在有了眼睛水平。因此,我们创建了一个新的患者级别状态。
data patient_level;
set have;
by patientID;
retain patient_status;
if first.patientID then patient_status =0;
patient_status = (patient_Status or status);
if last.patientID then output;
keep patientID patient_Status gender;
run;
现在,我们可以运行您的第二个proc freq
。另请注意,您有一个很好的患者数据集。
title "Patients with/without condition in any eye";
proc freq data=patient_level;
tables patient_status;
run;
title;
你也可以进行卡方分析,虽然我不是统计学家,也不会知道这是否是一个合适的分析。无论如何,它可能比你的第一个好 - 因为它正确地识别出至少有一只眼睛具有/没有状态。如果您需要知道眼睛的数量,您可能需要一个不同的指示器。
title "Crosstab of gender by patient having/not having condition";
proc freq data=patient_level;
tables gender*patient_Status/chisq;
run;
title;
如果您的实际数据中每个患者都有这种情况,当然,卡方分析不太可能是合适的。