SAS特殊字符抛出输入的列对齐

时间:2015-10-29 06:32:19

标签: character-encoding sas special-characters informat

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

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

这适用于除包含特殊/国际字符的行以外的每一行。如:

94   SociÈtÈ GÈnÈrale             France             $98.6B    $3.3B $1,531.1B    $25.8B

这些行以第一个货币值(@ 53 sales comma6。)跳闸,并抛出一个警告,表示找到了该输入的无效数据,并且分配了缺失值(。)。

使用@ pointers和informat w值似乎表明特殊字符正在抛弃列对齐,这是可能的(即使打印为单个字符,特殊字符实际占用2位/空格。是有一个简单的解决方案吗?

1 个答案:

答案 0 :(得分:1)

是的,你是完全正确的:如果字符是用UTF8编码的,它们可能占用1到4个字节,许多字符是一个字节,但有些字符占用更多(这里你称之为“特殊字符”)。如果SAS正在将文件读取为WLATIN1,那么它将假定每个字节都是一个单独的字符。

您的代码对我来说有点混乱:您指定文件是WLATIN1,但是您指示SAS将该字段读入为UTF-8。这是什么?

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