在SAS中提取字符串的左侧部分?

问题描述 投票:0回答:5

是否有一个函数 SAS proc SQL,我可以用它来提取字符串的左侧部分。它类似于 LEFT 函数 sql server。在 SQL 中我有

left(11111111, 4) * 9 = 9999
,我想在 SAS proc SQL 中有类似的东西。任何帮助将不胜感激。

sas proc-sql
5个回答
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;

2
投票

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

另请注意,这是一个字符串函数,但在您的示例中,您将其应用于数字。 SAS 会让您这样做,但一般来说,明智的做法是使用

put()
input()
函数控制字符串和数字之间的转换,以保持日志干净,并确保您只在实际想要转换的地方进行转换。


2
投票

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

SUBSTRN(string, position <, length>)

论据

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

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

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

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


1
投票

正如其他人指出的那样,

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

了解 SAS 函数的一个好方法是使用 google

sas functions by category
,在撰写本文时,它会将您引导至此处:

按类别划分的 SAS 函数和 CALL 例程

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

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

如果您已浏览完所有函数,但仍然找不到您要查找的内容,那么您的下一个选择可能是使用

proc fcmp
编写自己的 SAS 函数。如果您在执行此操作时需要帮助,我建议您发布一个新问题。


0
投票

我认为 SAS proc SQL left 函数不会满足您的需要

使用子字符串

就像: substr("column varable", 1,1) 会给你左边的第一个字符

就像 Excel 中的 Left("column varable", 1)

© www.soinside.com 2019 - 2024. All rights reserved.