可变长度的SAS infile杂乱格式

标签 sas

我有一个杂乱的文件,其中一些列是制表符分隔的,一些是逗号。

我的数据集问题是读取可变长度的文件

12        Stephen Cole, 33, Columbia, MO
5          Dave Anderson, 25*, Concord, OH 

第一列是ID(tab)name(逗号)age(逗号)、active(age后面有星号)、home(tab)

年龄后面的 * 表示他们是否不活跃。

所有名称都从 @19 列开始,但之后的所有内容都是可变长度和列开头。

我想读入我最终得到的格式。

ID   Name           Age  Active     Home
12   Stephen Cole   33   Active     Columbia, MO
5    Dave Anderson  25   Inactive   Concord, OH

到目前为止我有:

data marathon;
   infile 'c:/file.txt' dlm=',' pad firstobs=12;
   input @3 ID 3. @19 Name $CHAR13.;

然后我陷入了如何阅读其余部分的困境。我主要对如何阅读年龄旁边的星号作为自己的专栏感到困惑。如果我明白这一点,我想我可以处理剩下的事情。

最佳答案

您有几个问题。首先,您需要使用定界输入,具体来说,您需要将逗号和制表符组合成一组定界符——一种方式如下所示。其次,您有两个重要的领域;带有星号的需要在之后进行解析(我使用 compress 在第一行保留特定的数字,并在第二行保留特定的星号)。您还需要在单独的字段中读取城市/州并将它们组合在一起(我使用 catx)。

data want;
infile "c:\temp\test.dat" dlm='092C'x;
input
id
name :$50.
age_active $
home_city :$25.
home_st $
;
age=input(compress(age_active,,'kd'),best.);
active = ifc(compress(age_active,'*','k')='*','Active','Inactive');
home = catx(', ',home_city,home_st);
run;

注意长度,根据我过去的经验,我建议使用合理的长度,但您很容易看到更长的名称或城市。

关于可变长度的SAS infile杂乱格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23433700/

相关文章:

SAS Enterprise Guide - 从本地磁盘读取分隔文件?

sas - 按组和 block 划分的箱线图,具有轴对齐的统计数据

sas - 如何在 SAS 中根据财政年度获取周值?

r - 相同的回归,不同的统计数据(R v. SAS)?

SAS:将字符转换为数字变量 - 逗号作为小数点分隔符

sas - 在 SAS 数据集成中,创建用户编写的转换以在某些条件成立时跳过进一步的作业执行而不会给出错误

sas - 复制 SAS 中的前一列值

导入带有行和列分隔符的平面文件

sas - 如何在不使用原始名称的情况下重命名变量?

date - 挣扎于日期格式,想要 YYYY-MM-DD