【问题标题】:read values using sequential line pointer control in sas在 sas 中使用顺序行指针控制读取值
【发布时间】:2015-09-16 09:47:03
【问题描述】:

我有以下txt文件,记录方式如下

LEE ATHNOS
1215 RAINTREE CIRCLE
PHOENIX  AZ 85044
JOYCE BENEFIT
85 MAPLE AVENUE
MENLO PARK  CA 94025

这些实际上是多行中的 2 条记录。我用来输入记录的代码

data lineinput;
infile linein;
input Lname $ Fname $ /
      Address $1-20 /
      City & $10. State $ zip $ ;
run;

我无法读取第二条记录。 以下是日志

NOTE: The infile LINEIN is:
      Filename=\\VBOXSVR\win_7\SAS\DATA\INPUT\linepointer.txt,
      RECFM=V,LRECL=256,File Size (bytes)=105,
      Last Modified=30Jun2015:00:45:47,
      Create Time=30Jun2015:00:32:31

NOTE: LOST CARD.
Lname=JOYCE Fname=BENEFIT Address=MENLO PARK  CA 94025 City=  State=  zip=  _ERROR_=1 _N_=2
NOTE: 6 records were read from the infile LINEIN.
      The minimum record length was 10.
      The maximum record length was 20.
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
NOTE: The data set WORK.LINEINPUT has 1 observations and 6 variables.
NOTE: DATA statement used (Total process time):
      real time           0.02 seconds
      cpu time            0.01 seconds

在 proc print 我得到以下输出

任何想法家伙为什么我没有得到正确的第二条记录。(城市名称之间有一个空格,所以我使用了 & )

【问题讨论】:

  • @Kyralessa 以上信息来自sas出版的SAS Certification Preparation Guide Base Programming教材。
  • @MukeshKumarSingh 当我通过数据线将上述数据粘贴到 SAS 中时,我没有收到任何错误。我想知道你的文件是否有问题?你能粘贴到数据线中看看是否有效吗?
  • @Joe 是的,这行得通。那么使用文件加载可能会出现什么问题?我希望它也适用于文件!你可以使用文件名检查吗?
  • @Joe 请查看我粘贴在问题中的日志。 “LOST CARD”很有趣。
  • 是的,我在读取文件时遇到了同样的问题。试图回忆造成这种情况的原因;这是我以前见过的。 (添加第三条记录,你会发现它变得更糟,顺便说一句。)

标签: dataset sas


【解决方案1】:

您需要添加一个选项“trunco​​ver”才能在流设置中工作:

filename FT15F001 temp lrecl=512; 
data hipa;
   infile FT15F001 truncover; 
input Lname $ Fname $ /
      Address $1-20 /
      City & $10. State $ zip $ ;
parmcards4;
LEE ATHNOS
1215 RAINTREE CIRCLE
PHOENIX  AZ 85044
JOYCE BENEFIT
85 MAPLE AVENUE
MENLO PARK  CA 94025
;;;;

run;

【讨论】:

  • 看起来“PAD”也可以正常工作(如果 LRECL 足够长的话),甚至只是删除 / 标记。您还记得数据线和流输入之间的工作方式不同的原因吗?
  • 看起来 MISSOVER 也适用于这种情况。也可能不是。
  • 我猜它应该先查看下一行,但我不太清楚为什么。
  • @HaikuoBian MISSOVER 是如何解决问题的!!我很困惑
  • MISSOVER 会解决 LOST CARD 问题,但不会修复程序,因为它会在长度小于 20 个字符时使 ADDRESS 丢失。您几乎从不想使用 MISSOVER 选项。请改用 TRUNCOVER。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2016-08-15
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多