SAS 特殊字符丢弃输入的列对齐

SAS Special Characters Throwing Off Column Alignment of Input

我正在将.dat 数据集输入到sas 中,用于练习教学信息的使用。这是我目前所拥有的。

DATA companies;
    INFILE "/folders/myshortcuts/Stat324/BigCompanies.dat" encoding='wlatin2';
    INPUT rank 3. @6 company $UTF8X25. @35 country . @53 sales comma6. @60 profits comma8. @70 assets comma8. @82 marketval comma6.;
RUN;

这适用于除包含 special/international 个字符的行之外的每一行。如:

94   SociÈtÈ GÈnÈrale             France             .6B    .3B ,531.1B    .8B

这些行在第一个货币值 (@53 sales comma6.) 处跳闸,并抛出一条警告,指出为该输入找到了无效数据,并分配了一个缺失值 (.)。

玩玩@指针和信息格式 w 值似乎表明特殊字符正在摆脱列对齐,这是否可能(一个特殊字符实际上占用 2 bits/spaces,即使它打印为单个字符。有没有简单的解决方案?

是的,你完全正确:如果字符以 UTF8 编码,它们可能需要 1 到 4 个字节,许多字符是一个字节,但有些需要更多(你称之为 "special characters"这里)。如果 SAS 将文件读取为 WLATIN1,那么它会假定每个字节都是一个单独的字符。

你的代码让我有点困惑:你指定文件是 WLATIN1,但随后你指示 SAS 在该字段中读取为 UTF-8。是哪个?

如果您的会话编码与 UTF-8 兼容,并且要读入的文件编码为 UTF-8,那么您可能需要简单地将 infile 上的编码切换为 UTF-8。如果你的文件有混合编码,并且有一个原因你不能使用 UTF-8 编码来读取它,那么你可能会遇到一个复杂的问题,需要用特殊代码来处理(即弄清楚多长时间UTF8 部分实际上是,然后将指针前进到正确的位置以读取下一个字段)。您也可以使用定界符来读入;这取决于数据的确切格式。