【问题标题】:SAS infile messy format of variable lengths可变长度的SAS infile凌乱格式
【发布时间】:2014-05-03 02:14:06
【问题描述】:

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

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

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.;

然后我被困在如何阅读其余部分。我主要被如何阅读年龄旁边的星号作为自己的专栏。如果我明白这一点,我想我可以处理剩下的。

【问题讨论】:

  • 修复了您的数据。如果那些 <br> 字段应该在那里,请将它们放回去 - 我假设您将它们用于布局目的。

标签: sas


【解决方案1】:

您有几个问题。首先,您需要使用分隔输入,特别是您需要将逗号和制表符组合成一组分隔符 - 一种方式如下所示。其次,您有两个重要的字段;带有星号的那个需要在之后进行解析(我使用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;

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

【讨论】:

  • @user667489 这种输入风格需要使用信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 2014-09-19
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多