Csv SAS内嵌正在为某些列创建缺少的值

Csv SAS内嵌正在为某些列创建缺少的值,csv,import,sas,Csv,Import,Sas,我正在经历一些非常奇怪的行为。我有一个CSV数据集,有很多列(3199)和148行/观察值。只有一些变量是有意义的,但是我已经解析并处理了我只需要找到的一些变量的值都是缺失的。直接查看CSV(在我可以查看的地方)并查看R中的数据可以确认数据是否丢失 我的数据步骤如下所示: DATA WORK.MYFILE; INFILE '\\[SERVER NAME]\[FOLDERS]\RawData.csv' lrecl=32760 DSD TRUNCOVER FIRSTOBS=3

我正在经历一些非常奇怪的行为。我有一个CSV数据集,有很多列(3199)和148行/观察值。只有一些变量是有意义的,但是我已经解析并处理了我只需要找到的一些变量的值都是缺失的。直接查看CSV(在我可以查看的地方)并查看R中的数据可以确认数据是否丢失

我的数据步骤如下所示:

 DATA WORK.MYFILE;
  INFILE '\\[SERVER NAME]\[FOLDERS]\RawData.csv'
  lrecl=32760
  DSD
  TRUNCOVER
  FIRSTOBS=3  ;
INPUT
    F1               : $ CHAR6.
    ACAAAE31RR       : ?? BEST32.
    ACAAAE32RR       : ?? BEST32.
    ACAAAE33RR       : ?? BEST32.
    ACAAAE3BRR       : ?? BEST32.

 /* lots and lots of lines like this */

    SHAW5564TT3R     : ?? BEST32.
    SHAW6599TT3R     : ?? BEST32.
    SHAX0099TTAR     : ?? BEST32. ;
 RUN;
一切似乎都很好,直到我拿出我想要的数据,意识到这迫使一些缺失的变量。我的猜测是,在某个列(我不知道是哪一列)之后,直到观察行的末尾只有缺失的值,这可能会使后面的列变为缺失??(显然我是SAS的新手)

背景

以防万一

1) 数据中有许多遗漏的观察结果。。。大多数都排在前几十排。(数据是从1980年第一季度开始的时间序列,我想要的变量在2000年第一季度之前丢失。)

2) 我在SAS企业指南上。我通过使用导入向导获得上述代码,将代码复制到程序中,然后删除
infle
上方的格式化代码行,并将路径更改为实际CSV,而不是SAS使用向导创建的临时路径。当我这样做时,我找到并替换了所有
$CHAR1.
和其他错误指定的
信息
,并将所有内容更改为
BEST32.

3) 我的直觉是,在某个列之后,所有变量都是按字母顺序列出的。我想要的变量如下:
ACAINDIRR
aedindir
BVAINDIRR
BVIINDIRR
MWIINDIRR
OHAINDIRR
OOHINDIRR
。前三个变量各有104个未遗漏的观察值,如预期的那样。第四个(
BVI…
)有43个未缺失的观测值,其余的没有未缺失的观测值

4) 我已经尝试了很多解决问题的方法来解决这个问题。唯一接近的是将CSV转换为at*.txt文件。奇怪的是,第四个变量BVIINDIRR有104个非缺失的观察值。但是,按字母顺序排列的后面的表仍然有0个未丢失的OB

非常感谢您的帮助

编辑 从
输入
命令中删除
不会导致任何错误或警告。我没有收到任何关于字符转换为数字的警告。日志中只有以下注释:

  NOTE: The infile  '\\[SERVER NAME]\[FOLDERS]\RawData.csv'is:
  Filename= \\[SERVER NAME]\[FOLDERS]\RawData.csv,
  RECFM=V,LRECL=32760,File Size (bytes)=23765791,
  Last Modified=03Aug2016:08:50:21,
  Create Time=03Aug2016:10:52:33

NOTE: 148 records were read from the infile  '\\[SERVER NAME]\[FOLDERS]\RawData.csv'.
  The minimum record length was 32294.
  The maximum record length was 32760.
  One or more lines were truncated.
NOTE: The data set WORK.PARETO has 148 observations and 31998 variables.
NOTE: MVA_DSIO.OPEN_CLOSE| _DISARM|         STOP| _DISARM| 2016-08-05T08:47:01,746-04:00| _DISARM| WorkspaceServer| _DISARM| SAS| 
  _DISARM| | _DISARM| 148| _DISARM| 28418048| _DISARM| 10| _DISARM| 11| _DISARM| 66861615| _DISARM| 569154881| _DISARM| 
  0.296875| _DISARM| 0.672000| _DISARM| 1786020421.075000| _DISARM| 1786020421.747000| _DISARM| 0.281250| _DISARM| | _ENDDISARM 
NOTE: PROCEDURE| _DISARM|         STOP| _DISARM| 2016-08-05T08:47:01,746-04:00| _DISARM| WorkspaceServer| _DISARM| SAS| _DISARM| | 
  _DISARM| 682061824| _DISARM| 26718208| _DISARM| 10| _DISARM| 11| _DISARM| 72237092| _DISARM| 569155157| _DISARM| 4.750000| 
  _DISARM| 7.937000| _DISARM| 1786020413.810000| _DISARM| 1786020421.747000| _DISARM| 2.453125| _DISARM| | _ENDDISARM 
 NOTE: DATA statement used (Total process time):
  real time           7.93 seconds
                        08:45 Friday, August 5, 2016

  cpu time            4.75 seconds

尝试将中缺少的列中的数据作为字符变量读取,使用诸如$CHAR200之类的信息(具有较长的长度,因此不太可能截断它-使用$CHAR1,第一个字符后面的所有内容都不会显示)。我的猜测是,您缺少的所有列都是字符数据,或者至少有一个字符,而SAS正忙着寻找数字数据——因为您在指定best32时告诉它


日志中是否有关于将字符值转换为数值的注释?如果没有,您引用的数据步骤将附带哪些注释?

尝试使用$CHAR200等信息从中缺少的列中读取数据作为字符变量(长度较长的信息,因此您不太可能截断它-使用$CHAR1,第一个字符后的所有内容都不会显示)。我的猜测是,您缺少的所有列都是字符数据,或者至少有一个字符,而SAS正忙着寻找数字数据——因为您在指定best32时告诉它


日志中是否有关于将字符值转换为数值的注释?如果没有,您引用的数据步骤会附带哪些注释?

您的LRECL显然不足。假设是一个非UTF代码页文件,您的文件是2300万字节,但只有148行。这意味着平均每行大约160000个字符。LRECL=32767不会降低这一点


增加你的LRECL(正如评论中所建议的,
LRECL=1M
可能是合理的),看看这是否解决了你的问题,或者你是否有其他问题需要用特定的字符变量来解决。

你的LRECL显然不足。假设是一个非UTF代码页文件,您的文件是2300万字节,但只有148行。这意味着平均每行大约160000个字符。LRECL=32767不会降低这一点


增加你的LRECL(正如评论中所建议的,
LRECL=1M
可能是合理的),看看这是否解决了你的问题,或者你是否有其他问题需要用特定的字符变量来解决。

删除??从代码中生成错误,这样您就知道哪里出了问题,哪里出了问题。@Reeza-没有导致任何错误或警告。我编辑了这个问题以包含注释。@Tony表示您需要增加LRECL,以便不再看到“一行或多行被截断”的消息。您可以将其设置得非常高,如LRECL=1M。一旦您不再看到截断消息,您将能够从消息“最大记录长度为…”中确定实际的LRECL。@RobertPenridge maximum
LRECL
是您的操作系统允许的任何值。如果您想使用
\u infle\u
(因为这是一个受字符变量限制的字符变量),则32767是最大值。@Joe小心,您在这里显示的是您的年龄;-)是的,我只是在SAS 9面世之前才开始使用SAS,所以我记得关于SAS 8的细节很少(除了它比SAS 9差得多)??从代码中生成错误,这样您就知道哪里出了问题,哪里出了问题。@Reeza-没有导致任何错误或警告。我编辑了这个问题以包含注释。@Tony表示您需要增加LRECL,这样您就不再需要