我有一个凌乱的文件,其中一些列是制表符分隔的,有些是逗号。
我的数据集问题是读取长度可变的文件
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.;
然后我被困在如何阅读其余部分。我主要是如何阅读年龄旁边的星号作为自己的列。如果我理解了这一点,我想我可以处理其余的事情。
答案 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;
注意你的长度,根据我过去的经验,我建议合理的,但你可以很容易地看到更长的名字或城市。