考虑以下来自Stata .dct 文件的几行,该文件为 Stata 定义了如何读取这个固定宽度的 ASCII 文件(可以使用任何平台上的任何 ZIP 软件解压缩):
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
参数,从而排除了这种类型的双重阅读。
scan
有没有一种标准的方法来处理这个问题,而不是通过在整个文件中重新创建轮子并手动解析它?
(start, width)
这里的背景是我正在编写一个函数来解析这些 .DCT 文件,采用 SAScii 的风格,如果我可以为每个变量指定对,而不仅仅是.DCT 文件,我的工作会简单得多widths
。