SAS:具有多个 ID 变量的 PROC FREQ
SAS: PROC FREQ with multiple ID variables
我有追踪特定眼部现象的数据。有的患者双眼都有,有的患者单眼都有。这是一些数据的样子:
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;
然而,在交叉 table 中,出现该现象的患者人数是正确的 (9),但没有出现该现象的患者人数是正确的 (0)。有没有人对如何做这个卡方有任何想法,如果至少一只眼睛有这种现象,那么他们对这种现象呈阳性?
谢谢!
PROC FREQ
正在按照您的指示进行操作:计算 status=0
个案例。
一般来说,您在这里使用的是一些钝器来完成您想要完成的任务,而您可能应该使用更精确的工具。例如,PROC SORT NODUPKEY
有点矫枉过正,而且它并没有真正按照您的意愿行事。
要建立 has/doesn 的数据集,例如,让我们做一些事情。首先,我再添加一行 - 实际上没有的人 - 所以我们看到它起作用了。
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;
您也可以进行卡方分析,但我不是统计学家,也不会深入探讨这是否是一种合适的分析。无论如何,它可能比您的第一个更好 - 因为它至少在一只眼睛中正确识别 has/doesn 没有状态。如果你需要知道眼睛的数量,你可能需要一个不同的指标。
title "Crosstab of gender by patient having/not having condition";
proc freq data=patient_level;
tables gender*patient_Status/chisq;
run;
title;
如果您的实际数据显示每个患者都患有这种疾病,当然,卡方分析不太可能是合适的。
我有追踪特定眼部现象的数据。有的患者双眼都有,有的患者单眼都有。这是一些数据的样子:
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;
然而,在交叉 table 中,出现该现象的患者人数是正确的 (9),但没有出现该现象的患者人数是正确的 (0)。有没有人对如何做这个卡方有任何想法,如果至少一只眼睛有这种现象,那么他们对这种现象呈阳性?
谢谢!
PROC FREQ
正在按照您的指示进行操作:计算 status=0
个案例。
一般来说,您在这里使用的是一些钝器来完成您想要完成的任务,而您可能应该使用更精确的工具。例如,PROC SORT NODUPKEY
有点矫枉过正,而且它并没有真正按照您的意愿行事。
要建立 has/doesn 的数据集,例如,让我们做一些事情。首先,我再添加一行 - 实际上没有的人 - 所以我们看到它起作用了。
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;
您也可以进行卡方分析,但我不是统计学家,也不会深入探讨这是否是一种合适的分析。无论如何,它可能比您的第一个更好 - 因为它至少在一只眼睛中正确识别 has/doesn 没有状态。如果你需要知道眼睛的数量,你可能需要一个不同的指标。
title "Crosstab of gender by patient having/not having condition";
proc freq data=patient_level;
tables gender*patient_Status/chisq;
run;
title;
如果您的实际数据显示每个患者都患有这种疾病,当然,卡方分析不太可能是合适的。