Character encoding SAS特殊字符摆脱输入的列对齐

Character encoding SAS特殊字符摆脱输入的列对齐,character-encoding,sas,special-characters,informat,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

我正在将.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位/空格。有简单的解决方案吗?

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

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


如果您的会话编码与UTF-8兼容,并且要读入的文件编码为UTF-8,那么您可能需要简单地将infle上的编码切换为UTF-8。如果您的文件具有混合编码,并且有一个无法使用UTF-8编码读入的原因,那么您可能会遇到一个复杂的问题,需要使用speci来处理al代码(即,计算UTF8部分的实际长度,然后将指针移到正确的位置以读取中的下一个字段)。您也可以使用分隔符来读取此内容;这在一定程度上取决于数据的确切格式。

infle语句中的wlatin1和utf-8用于获取所有内容,包括特殊的国际字符。但是,在这两种情况下,指针从第一个$xx.xB值开始都不正确,即使国家/地区umn对于任何包含这些国际字符的行都是可以读取的。我不确定文件是如何编码的,特别是。如果有帮助的话,它是一个.dat文件。有没有简单的方法告诉SAS,当它在输入步骤中遇到特殊字符时,用相应的普通字符替换它?即å到a?您的SAS se是什么编码SESSION using?(如果您不确定,这可能由您的配置文件决定)它是sas大学版/sas studio,我想我记得读到它默认为utf-8?您可以发布到您的文件(或包含一些utf-8字符的子集)的链接吗?如果可以,请编辑到问题中。