从 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 SQL
或 Proc 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.
随着要创建的自定义格式的要求越来越复杂,您将需要在输入控制数据集中包含更多信息变量。
我在 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 SQL
或Proc 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.
随着要创建的自定义格式的要求越来越复杂,您将需要在输入控制数据集中包含更多信息变量。