从 SAS 中的单个 table 生成许多 table

Generating many tables from a single table in SAS

我在 SAS 中有一个 table,其中包含我想要的格式信息。我想将这些数据分类到给定的类别中。

我不知道如何根据数据创建 xform 或格式文件。

一个示例 table 如下所示:

     TxtLabel  Type FmtName label   Hlo count
         .      I   FAC1f    0      O    1
        1996    I   FAC1f    1           2
        1997    I   FAC1f    2           3

我想在不同的数据集中对所有年份进行约会,如 1997 年之后或 1996 年之前。

问题是我知道如何通过硬编码来做到这一点,但是这些文件每次都会更改数字所以我希望使用 table 中的信息来生成 bin 而不是对它们进行硬编码。

如何使用另一个数据集中的列按数据进行分箱以进行分类?

编辑

我有两个数据集,一个看起来像我包含的那个,另一个有标题为 "YEAR" 的列。我想使用第一个类别对第二个数据集进行分类。在这种情况下,TxtLabel 中有两个可用年份。有多个这样的 table,我正在研究如何从 table 生成 PROC 格式代码,而不是对值进行硬编码。

这应该运行创建所需的格式

Proc FORMAT CNTLIN=MyCustomFormatControlData;
run;

然后您可以在数据步骤中使用它,或将它应用于数据集中的列。

对数据进行分箱可能会被解释为 'data set splitting' 但您的问题并不清楚是否是这样。通用任意拆分通常使用以下技术之一完成:

  • 墙纸源代码从 Proc SQLProc FREQ 步骤
  • 中收集的信息填充的宏变量解析
  • 动态数据拆分使用 hash 对象对内存中的记录进行分组,并通过 .output() 调用保存到数据集。

显式合并的示例代码

data want0 want1 want2 want3 want4 want5 wantOther;
  set have;
  * explicit wall paper;
  select (put(year,FAC1f.));
    when ('0') output want0;
    when ('1') output want1;
    when ('2') output want2;
    when ('3') output want3;
    when ('4') output want4;
    when ('5') output want5;
    otherwise output wantOther;
run;

这是宏生成的源代码可以产生的结构,需要

  • 一次确定要生成的when/output
  • 第二遍以应用生成的代码行。

如果这是您正在尝试的数据处理:

  • 做一些研究(那里有很多信息)
  • 写一些代码
  • 如果遇到无法解决的错误,请提出新问题

过程格式

Proc FORMAT has a CNTLIN option for specifying a data set containing the format information. The structure and values expected of the Input Control Data Set (that CNTLIN) is described in the Output Control Data Set 文档。一些重要的控制数据列是:

FMTNAME
specifies a character variable whose value is the format or informat name.

LABEL
specifies a character variable whose value is associated with a format or an informat.

START
specifies a character variable that gives the range's starting value.

END
specifies a character variable that gives the range's ending value.

随着要创建的自定义格式的要求越来越复杂,您将需要在输入控制数据集中包含更多信息变量