考虑以下几行来自Stata .dct文件的内容,该文件定义了Stata如何读取这个固定宽度的ASCII文件(可以在任何平台上使用任何ZIP软件进行解压缩):
基本上,此ASCII文件每行的第24到39个字符如下所示:
start type varname width description
_column(24) long rfv1 %5f Patient's Reason for Visit #1
_column(29) long rfv2 %5f Patient's Reason for Visit #2
_column(34) long rfv3 %5f Patient's Reason for Visit #3
_column(24) long rfv13d %4f Patient's Reason for Visit #1 - broad
_column(29) long rfv23d %4f Patient's Reason for Visit #2 - broad
_column(34) long rfv33d %4f Patient's Reason for Visit #3 - broad
基本上,此ASCII文件每行的第24到39个字符如下所示:
AAAAaBBBBbCCCCc
第一个宽泛的代码是 AAAA
,同样的原因,更窄的代码是 AAAAa
,以此类推。
换句话说,由于代码本身具有分层结构,在每一行中相同的字符会被读取两次以创建两个不同的变量。
相比之下,read.fwf
只需要一个 widths
参数,这种双重读取的情况就被排除了。
有没有一种标准的处理方法,可以避免通过手动扫描整个文件并逐个解析来重新创建轮子?
背景是我正在编写一个函数来解析这些 .DCT 文件,类似于 SAScii 的风格,如果我可以为每个变量指定 (start, width)
对而不仅仅是 widths
,我的工作将会简单得多。
?read.SAScii
中得知:"此函数无法处理重叠的列。" - Ari B. Friedman