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 部分实际上是,然后将指针前进到正确的位置以读取下一个字段)。您也可以使用定界符来读入;这取决于数据的确切格式。
我正在将.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 部分实际上是,然后将指针前进到正确的位置以读取下一个字段)。您也可以使用定界符来读入;这取决于数据的确切格式。