【问题标题】:SAS: Where statement not working with string valueSAS:Where语句不适用于字符串值
【发布时间】:2013-10-05 13:52:13
【问题描述】:

我正在尝试对名为 dataname 的数据子集使用 PROC FREQ。我希望它包含 varname 不等于“A.Never Used”的所有行。我有以下代码:

proc freq data=dataname(where=(varname NE 'A.Never Used')); 运行;

我认为尾随或前导空格可能有问题,所以我也尝试了:

proc freq data=dataname(where=(strip(varname) NE 'A.Never Used')); 运行;

我的猜测是由于某种原因我的字符串值不是“A.Never Used”,但每当我打印数据时,这就是我看到的值。

【问题讨论】:

    标签: sas where


    【解决方案1】:

    这是处理字符串数据时的一个常见问题(并且有充分的理由不这样做!)。您应该考虑数据的来源——它来自网络表单吗?然后它可能包含不间断空格('A0'x)而不是常规空格('20'x)。它是否来自 unicode 环境(例如,日文字符是合法的)?那么你可能会遇到转码问题。

    一些选项可以解决大部分此类问题:

    1. 压缩除字母字符以外的所有内容。 where=(compress(varname,,'ka') ne 'ANeverUsed') 例如。 “ka”表示“仅保留”和“字母字符”。
    2. UPCASE 或 LOWCASE 以确保您不会遇到大小写问题。
    3. 在数据步骤中使用put varname HEX.; 查看底层字符。每两个十六进制字符是一个字母字符。 20 是空格(strip 将删除)。在执行此操作之前按varname 排序,以便您可以轻松地看到您认为应该彼此相邻的行 - 有什么区别?可能是一些特殊字符,或多字节字符,或者谁知道呢,但在这里应该很明显。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多