【问题标题】:SAS: PROC FREQ with multiple ID variablesSAS:具有多个 ID 变量的 PROC FREQ
【发布时间】:2018-01-03 15:57:48
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 你能发布一个示例数据集吗?
  • @Joe 我在上面的屏幕截图中发布了一个数据示例。你需要更多吗?
  • 以上内容并未复制您遇到的问题。请发布足以复制问题的完整数据,而不是图像形式,包括代码的预期结果和实际结果。
  • @Joe 我已根据您的建议更新了帖子。谢谢

标签: sas frequency


【解决方案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;

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

【讨论】:

  • 非常感谢!太棒了。并非数据集中的每个患者都有这种情况。我只是把它放在那里来说明问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多