【问题标题】:Using SUBSTR and CHARINDEX into PROC SQL (SAS)在 PROC SQL (SAS) 中使用 SUBSTR 和 CHARINDEX
【发布时间】:2015-07-16 18:37:45
【问题描述】:

我已经为 Microsoft SQL Server 编写了一个 SQL 查询,但现在我正在尝试将其转换为 SAS PROC SQL,但我遇到了问题。

数据:

╔══════════╦══════════╦════════╗
║   Name   ║ Question ║ Answer ║
╠══════════╬══════════╬════════╣
║ Jane Doe ║ Q1       ║ Q1-Yes ║
║ John Doe ║ Q1       ║ Q1-No  ║
╚══════════╩══════════╩════════╝

我想去掉“答案”栏中的“Q1-”并将其输出为“是”或“否”。

在SQL中,我使用的代码是:

SUBSTRING (AnswerTXT, CHARINDEX('-', AnswerTXT)+1, LEN (AnswerTXT)) as 'Answer'

在 SAS 中,我发现我需要在 PROC SQL 中更改它。这是我到目前为止得到的:

SELECT SUBSTR(AnswerTXT, 

我尝试过 Index and Scan 并不断收到此类错误:

CLI describe error: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]'scan' is not a 
   recognized built-in function name.

谢谢!

【问题讨论】:

  • answer 列中是否总是需要删除 3 个字符?
  • 为什么不直接使用 pass-through 并使用原生 T-SQL 编写 SQL?
  • @vkp:很遗憾没有,有时会超过 3 个字符。
  • 那个错误听起来像它是一个直通查询,@GordonLinoff ...否则这很奇怪。
  • @GordonLinoff 我认为这个问题没有包含正确的语法。

标签: sql sql-server sas proc-sql


【解决方案1】:
SUBSTR(answer, INDEX('-',answer)+1, length(answer))

试试这个

【讨论】:

  • 这个想法是对的。但正确的语法应该是: substr(answer, index(answer, '-') + 1); /* 在数据步骤和 proc sql 上测试。当省略第三个参数时,提取字符串的其余部分 */
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
相关资源
最近更新 更多