1

我正在将一个 .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.) 处跳闸,并引发警告,指示为该输入找到无效数据,并分配缺失值 (.)。

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

4

1 回答 1

1

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

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

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

于 2015-10-29T15:31:48.773 回答