在 sas 中读取数据在某些平台上有效,在其他平台上无效

reading in data in sas works on some platforms and not on others

为什么此代码在 SAS 大学版中不起作用,即使它适用于 Windows 的 SAS 9.4?

DATA HealthPlan;
  INFILE DATALINES FIRSTOBS = 2;
  INPUT Department :. HealthPlan $; 
  DATALINES;
Department  HealthPlan
Accounting  A
Food    A
Security    B
;
RUN;

好像跟分隔符的处理有关。如果我添加 DLM = '09'x,那么它将在大学版上运行,否则我的日志文件的输出如下:

 1          OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
 72         
 73         DATA HealthPlan;
 74           INFILE DATALINES FIRSTOBS = 2;
 75           INPUT Department :. HealthPlan $;
 76           DATALINES;

 NOTE: LOST CARD.
 RULE:      ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0                     
 81         ;
 Department=SecurityB HealthPlan=  _ERROR_=1 _N_=2
 NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
 NOTE: The data set WORK.HEALTHPLAN has 1 observations and 2 variables.
 NOTE: DATA statement used (Total process time):
       real time           0.00 seconds
       cpu time            0.01 seconds


 81         ;
 82         RUN;
 83         
 84         OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
 97         

会不会是编码问题?

这可能与编写的代码的行尾有关。 在 linux 中有 LF(换行),而在 windows 中有 CRLF(回车 return 和换行)是预期的。如果您共享完全相同的代码,则可能会被误解。 也许只是看看某些编辑器中显示不可打印字符的代码。

当 reading/writing 文件时,相关的 SAS 选项是 TERMSTR option,但不适用于数据线。

尝试使用 EXPANDTABS INFILE 语句选项。它有时会起作用,因为有些编辑器会在您提交时展开选项卡,而其他编辑器则不会。

因为SAS/Studio编辑器不够智能,无法在将代码传递给SAS执行之前用空格替换制表符。

无论如何,您真的不应该将制表符放入 SAS 程序中,绝对不应该放在行内数据行的中间。

如果制表符进入数据行是因为您粘贴了从 Excel 复制的单元格,那么如果您在 SAS/Studio 中更改编辑器首选项设置以将制表符替换为空格,则制表符将被替换当您粘贴到编辑器中时。