SAS:具有多个ID变量的PROC FREQ

时间:2017-07-27 18:57:48

标签: sas frequency

我有跟踪某种眼睛现象的数据。有些患者双眼都有,有些患者只用一只眼睛。这是一些数据的样子:

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)。有没有人对如何做这个卡方有任何想法,如果在至少一只眼睛中有这种现象,那么它们对这种现象是积极的吗?

谢谢!

1 个答案:

答案 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;

如果您的实际数据中每个患者都有这种情况,当然,卡方分析不太可能是合适的。