2017-07-27 136 views
1

我有跟踪某些眼睛现象的数据。有些患者双眼都有,有的患者只用一只眼睛。这是一些数据的样子:SAS:具有多个ID变量的PROC FREQ

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)。

enter image description here

我现在需要计算的这种现象的性别分布。我用:

proc freq data=new1; 
tables gender*Status/chisq; 
run; 

enter image description here

然而,在交叉表上,它的谁都有的现象(9)患者正确的号码,但不能没有正确的数字(0)。有没有人有关于如何做这个卡方的想法,如果至少有一只眼睛有这种现象,那么他们对这种现象是积极的吗?

谢谢!

+0

你可以发布一个示例数据集? – Joe

+0

@Joe我已经发布了一个在上面的屏幕截图中显示数据的例子。你需要更多吗? – ybao

+0

以上内容不会重现您拥有的问题。请发布完整的数据,而不是图像形式,足以复制该问题,包括预期结果和代码的实际结果。 – Joe

回答

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; 

如果您的实际数据让每个患者都有这种病症,当然,卡方分析是不太可能的。

+0

非常感谢!太棒了。并非数据集中的每个患者都有这种情况。我只是在那里说明这个问题。 – ybao