在SAS中根据字符间隔有条件地更改第一行名称
Changing the first row name conditionally on character interval in SAS
考虑以下数据:
data GDP;
input Year $ Agriculture Industry;
datalines;
2016 195 1634
2017 220 1986
;
导出为 .dat 文件时:
proc export
data = GDP
outfile = '....\GDP.dat'
dbms = TAB
replace;
run;
然后我得到以下文件:
但是,我想要以下文件:
其中:
Mydata
是我手动添加的文字
- 例如
Year
(即Year: 1-4
)之后的数字是值所在的字符间隔。例如,Year
列中的值是从字符 1 到 4。agriculture
列中的值是从 9 到 11,依此类推。
因此 SAS 应该计算值的间隔并将其添加到第一行名称。如何在 SAS 中实现?
您可以使用变量标签来伪造它,然后将 LABEL 选项添加到 PROC EXPORT。
data GDP;
input Year $ Agriculture Industry;
label Year = "Mydata, Year:1-4" Agriculture = "Agriculture:9-11";
datalines;
2016 195 1634
2017 220 1986;
run;
proc export
data = GDP
outfile = '....\GDP.dat'
dbms = TAB
LABEL
replace;
run;
仅供参考 - 看起来您正在尝试创建一个固定宽度的文件并将规范放入 header。我建议不要这样做,要么将规范放在一个单独的文件中,要么将其包含在文件的顶部。
将它放在 header 中会使任何其他系统更难正确处理。
如果您出于某种原因确实需要它,您可能还需要考虑使用数据步骤来创建导出,而不是使用 PROC EXPORT。
据我所知,虽然您可以将 PROC CONTENTS 输出推送到单独的数据集,但没有简单的方法来自动定义规范。
考虑以下数据:
data GDP;
input Year $ Agriculture Industry;
datalines;
2016 195 1634
2017 220 1986
;
导出为 .dat 文件时:
proc export
data = GDP
outfile = '....\GDP.dat'
dbms = TAB
replace;
run;
然后我得到以下文件:
但是,我想要以下文件:
其中:
Mydata
是我手动添加的文字- 例如
Year
(即Year: 1-4
)之后的数字是值所在的字符间隔。例如,Year
列中的值是从字符 1 到 4。agriculture
列中的值是从 9 到 11,依此类推。
因此 SAS 应该计算值的间隔并将其添加到第一行名称。如何在 SAS 中实现?
您可以使用变量标签来伪造它,然后将 LABEL 选项添加到 PROC EXPORT。
data GDP;
input Year $ Agriculture Industry;
label Year = "Mydata, Year:1-4" Agriculture = "Agriculture:9-11";
datalines;
2016 195 1634
2017 220 1986;
run;
proc export
data = GDP
outfile = '....\GDP.dat'
dbms = TAB
LABEL
replace;
run;
仅供参考 - 看起来您正在尝试创建一个固定宽度的文件并将规范放入 header。我建议不要这样做,要么将规范放在一个单独的文件中,要么将其包含在文件的顶部。 将它放在 header 中会使任何其他系统更难正确处理。
如果您出于某种原因确实需要它,您可能还需要考虑使用数据步骤来创建导出,而不是使用 PROC EXPORT。
据我所知,虽然您可以将 PROC CONTENTS 输出推送到单独的数据集,但没有简单的方法来自动定义规范。