【问题标题】:Extract left part of the string in SAS?在SAS中提取字符串的左侧部分?
【发布时间】:2014-10-14 14:03:00
【问题描述】:

是否有一个函数 SAS proc SQL 可以用来提取字符串的左侧部分。它类似于 LEFT 函数 sql server。在 SQL 中我有 left(11111111, 4) * 9 = 9999,我想在 SAS proc SQL 中使用类似的东西。任何帮助将不胜感激。

【问题讨论】:

    标签: sas proc-sql


    【解决方案1】:

    有一种印象,你想重复子字符串而不是乘法,所以我添加 REPEAT 函数只是为了好奇。

    proc sql;
    select 
      INPUT(SUBSTR('11111111', 1, 4), 4.) * 9            /* if source is char */
    , INPUT(SUBSTR(PUT(11111111, 16. -L), 1, 4), 4.) * 9  /* if source is number */
    , REPEAT(SUBSTR(PUT(11111111, 16. -L), 1, 4), 9)      /* repeat instead of multiply */
    FROM SASHELP.CLASS (obs=1)
    ;
    quit;
    

    【讨论】:

    • 非常感谢 Vasja,非常感谢我的情况下最好的第二套西装。它确实有效。
    【解决方案2】:

    substr("some text",1,4) 会给你“一些”。此函数在许多 SQL 实现中的工作方式相同。

    另外,请注意这是一个字符串函数,但在您的示例中,您将其应用于数字。 SAS 将允许您执行此操作,但总的来说,明智的做法是使用 put()input() 函数控制字符串和数字之间的转换,以保持日志清洁并确保您只在实际打算的地方进行转换。

    【讨论】:

      【解决方案3】:

      您可能正在寻找SUBSTRN 函数..

      SUBSTRN(string, position <, length>)
      

      参数

      string 指定字符或数字常量、变量、 或表达式。

      如果字符串是数字,则将其转换为字符值 使用 BEST32。格式。前导和尾随空白被删除,并且 没有消息发送到 SAS 日志。

      position 是指定第一个位置的整数 子字符串中的字符。

      length 是指定子字符串长度的整数。如果 不指定长度,SUBSTRN 函数返回子字符串 从您指定的位置延伸到 字符串。

      【讨论】:

      • SUBSTRN 在大多数情况下不会是惯用的; SUBSTRNSUBSTR基本一样,只是它可以返回一个空字符串,而SUBSTR不能(在SAS大多数情况下,空字符串是不可能的,所以后来添加了一些函数TRIMN和SUBSTRN可以)。通常你不会使用那个版本,除非你确实需要一个空字符串的可能性。
      【解决方案4】:

      正如其他人所指出的,substr() 是您正在寻找的功能,尽管我觉得更有用的答案也会“教你如何钓鱼”。

      了解 SAS 函数的一个好方法是在谷歌上搜索 sas functions by category,在撰写本文时它会引导您到这里:

      SAS Functions and CALL Routines by Category

      为了了解所有可用功能,值得至少浏览一次此列表。

      如果您要查找特定版本,您可能希望在搜索中包含 SAS 版本号。请注意,上面的链接适用于 9.2。

      如果您已经扫描了所有函数,但仍然找不到您要查找的内容,那么您的下一个选择可能是使用proc fcmp 编写您自己的 SAS 函数。如果您在这方面需要帮助,我建议您发布一个新问题。

      【讨论】: