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

在SAS中提取字符串的左侧部分?,sas,proc-sql,Sas,Proc Sql,是否有一个函数SAS proc SQL,我可以使用它来提取字符串的左侧部分。它类似于左侧函数SQL server。在SQL中,我有左(11111111,4)*9=9999,我想在SAS proc SQL中做一些类似的事情。任何帮助都将不胜感激。substr(“一些文本”,1,4)将为您提供“一些”。此函数在许多SQL实现中的工作方式相同 另外,请注意,这是一个字符串函数,但在您的示例中,您将其应用于一个数字。SAS将允许您这样做,但一般来说,明智的做法是使用put()和input()函数控制字符

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

substr(“一些文本”,1,4)
将为您提供“一些”。此函数在许多SQL实现中的工作方式相同

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

您可能正在寻找函数

SUBSTRN(string, position <, length>)
SUBSTRN(字符串,位置)
论据

字符串指定字符或数字常量、变量、, 或表达

如果字符串是数字,则将其转换为 使用最佳32。格式。移除前导和尾随空白,以及 未向SAS日志发送任何消息

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

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


我觉得你想重复子字符串而不是乘法,所以我添加了
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()
是您正在寻找的函数,尽管我觉得更有用的答案也会“教您如何钓鱼”

了解SAS函数的一个很好的方法是按类别在google上搜索
SAS函数
,在撰写本文时,这将指导您:

为了了解所有可用的功能,至少需要浏览一下这个列表一次

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


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

SUBSTRN在大多数情况下都不是惯用的
SUBSTRN
SUBSTR
基本相同,只是它可以返回空字符串,而SUBSTR不能(在SAS中,大多数情况下,空字符串是不可能的,因此后来添加了一些可以返回的函数TRIMN和SUBSTRN)。通常你不会使用那个版本,除非你确实需要一个空字符串。非常感谢Vasja,真的很感谢第二个适合我的。它确实有效。