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

时间:2018-09-24 13:04:09

标签: sas code-generation binning

我在SAS中有一个表,其中包含我想要的格式信息。我想将此数据分类为给定的类别。

我不知道该怎么做,是根据数据创建xform或格式文件。

一个示例表如下:

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

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

问题是我知道如何通过对其进行硬编码来实现此目的,但是这些文件每次都会更改数字,因此我希望使用表中的信息来生成垃圾箱,而不是对其进行硬编码。

如何使用来自另一个数据集的列对数据进行分类来进行分类?

修改

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

1 个答案:

答案 0 :(得分:2)

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

Proc FORMAT CNTLIN=MyCustomFormatControlData;
run;

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

禁止数据绑定可能被解释为“数据集拆分”,但您的问题并不清楚。通用任意拆分通常使用以下技术之一完成:

  • 墙纸源代码是根据在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

Proc FORMAT has a CNTLIN option用于指定包含格式信息的数据集。 Output Control Data Set文档中描述了输入控制数据集(CNTLIN)的结构和期望值。一些重要的控制数据列是:

  

FMTNAME
  指定一个字符变量,其值是格式或信息名称。

     

LABEL
  指定一个字符变量,其值与格式或informat相关联。

     

开始
  指定一个给出范围起始值的字符变量。

     

END
  指定一个字符变量,该变量给出范围的结束值。

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