是否有一个函数 SAS proc SQL 可以用来提取字符串的左侧部分。它类似于 LEFT 函数 sql server。在我有的 SQL 中 left(11111111, 4) * 9 = 9999
,我想在 SAS proc SQL 中使用类似的东西。任何帮助将不胜感激。
4 回答
有一种印象,你想重复子字符串而不是相乘,所以我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;
substr("some text",1,4)
会给你“一些”。此函数在许多 SQL 实现中的工作方式相同。
另外,请注意这是一个字符串函数,但在您的示例中,您将其应用于数字。SAS 将允许您执行此操作,但总的来说,明智的做法是使用put()
和input()
函数控制字符串和数字之间的转换,以保持日志清洁并确保您只在实际打算的位置进行转换。
您可能正在寻找SUBSTRN功能..
SUBSTRN(string, position <, length>)
论据
string指定字符或数字常量、变量或表达式。
如果字符串是数字,则将其转换为使用 BEST32 的字符值。格式。前导和尾随空格被删除,并且没有消息发送到 SAS 日志。
position是一个整数,它指定子字符串中第一个字符的位置。
length是一个整数,它指定子字符串的长度。如果不指定长度,则 SUBSTRN 函数返回从您指定的位置延伸到字符串末尾的子字符串。
正如其他人所指出的,substr()
是您正在寻找的功能,尽管我觉得更有用的答案也会“教你如何钓鱼”。
了解 SAS 函数的一个好方法是在 google 上搜索sas functions by category
,在撰写本文时它会引导您到这里:
值得至少浏览一次此列表,以了解所有可用功能。
如果您要查找特定版本,您可能希望在搜索中包含 SAS 版本号。请注意,上面的链接适用于 9.2。
如果您已经扫描了所有函数,但仍然找不到您要查找的内容,那么您的下一个选择可能是使用proc fcmp
. 如果您在执行此操作时需要帮助,我建议您发布一个新问题。