【问题标题】:SAS Special Characters Throwing Off Column Alignment of InputSAS特殊字符抛出输入的列对齐
【发布时间】:2015-10-29 23:31:48
【问题描述】:

我正在将一个 .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 位/空格,即使它打印为单个字符。是有简单的解决方案吗?

【问题讨论】:

    标签: character-encoding sas special-characters informat


    【解决方案1】:

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

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

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

    【讨论】:

    • wlatin1 和 infile 语句中的 utf-8 用于获取所有内容,包括特殊的国际字符。然而,在这两种情况下,对于包含这些国际字符的任何行,即使国家列被正确读取,指针最终从第一个 $xx.xB 值开始都不正确。我不确定文件是如何编码的,特别是。如果有帮助,它是一个 .dat 文件。有没有一种简单的方法可以告诉 SAS,每当在输入步骤中遇到特殊字符时,将其替换为相应的普通字符?即 å 到 a?
    • 您的 SAS 会话使用什么编码? (如果您不确定,这可能由您的配置文件决定)
    • 这是sas大学版/sas工作室,我想我记得看过它默认为utf-8?
    • 您能否发布指向您的文件(或包含一些 UTF-8 字符的子集)的链接?如果可以,请编辑问题。
    猜你喜欢
    • 2017-01-29
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多