如何在序列SAS中找到缺失的数字

How to find the missing numbers in sequence SAS

在 SAS 中,如何在我的 'Number' 列中找到每个 'ID' 的缺失数字?

例如,ID 1003 的最大值为 6,显然缺少数字 5。我有大约 4000 行要查看,因此手动执行此操作不会发生。

非常感谢任何帮助!我被难住了。

ID Number 1002 2 1002 1 1003 6 1003 4 1003 3 1003 2 1003 1 1005 4 1005 3 1005 2 1005 1 1007 1 1009 3 1009 2 1009 1

在使用 DATALINES 输入您在问题中提供的数据后,我 运行 以下代码。

第一个 T运行按 ID 处理数据:

proc sort data=mydata; by id; run;
proc transpose data =mydata  out=transposed  prefix=number_;
by ID;
var number;
id number;
run;

下一步只是重新排序变量名,保留语句在此步骤中不做任何其他事情。

data transposed_and_ordered;
retain id _name_ number_1 number_2 number_3 number_4 number_5 number_6;
set transposed;
run;

以上两个步骤(以及 DATALINES 输入步骤)产生了以下数据集 transposed_and_ordered:

-------------------------------------------------------------------------------
|ID   | NAME    | number_1 | number_2  | number_3  | number_4  | number_6 |
-------------------------------------------------------------------------------
|1002 | number  | 1        | 2         |           |           |          |
-------------------------------------------------------------------------------
|1003 | number  | 1        | 2         |3          |4          |6         |
-------------------------------------------------------------------------------
|1005 | number  | 1        | 2         |3          |4          |          |
-------------------------------------------------------------------------------
|1007 | number  | 1        |           |           |           |          |
-------------------------------------------------------------------------------
|1009 | number  | 1        | 2         |3          |           |          |

无需为您编写代码,这里是一种方法的概述...

  1. 按 ID(升序)和编号(降序)对数据进行排序
  2. 取每个ID的第一条记录(给出最大数量)
  3. 从最大数开始迭代到 1,每次迭代输出
  4. 按 ID 和编号重新排序(升序)