SAS infile凌乱的可变长度格式

时间:2014-05-02 17:25:18

标签: sas

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

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

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

第一列是ID(标签),名称(逗号)年龄(逗号),活动(年龄后存在星号),主页(标签)

年龄后的*表示他们是否处于非活动状态。

所有名称都从@ 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.;

然后我被困在如何阅读其余部分。我主要是如何阅读年龄旁边的星号作为自己的列。如果我理解了这一点,我想我可以处理其余的事情。

1 个答案:

答案 0 :(得分:2)

你有几个问题。首先,您需要使用分隔输入,特别是您需要将逗号和制表符组合成一组分隔符 - 下面显示了一种方法。其次,你有两个非常重要的领域;之后需要解析带有星号的那个(我使用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;

注意你的长度,根据我过去的经验,我建议合理的,但你可以很容易地看到更长的名字或城市。