【问题标题】:How to remove the first 3 characters from all values in a column (SAS, SQL)如何从列中的所有值中删除前 3 个字符(SAS、SQL)
【发布时间】:2018-02-26 21:12:26
【问题描述】:

我有一个以 OMX 开头的变量,但我只需要它后面的值。如何创建一个仅在 OST 之后具有值的新变量; 示例:OSTN44X8 必须仅变为 N44X8

proc sql; 
(Select * 
From data01 
WHERE RDATE between '2000-11-01' and '2018-02-25' 
(SELECT SUBSTR(REP_ID,4) AS ID ) ; 
quit; 

【问题讨论】:

  • 到目前为止你尝试过什么?提示:SUBSTR()。
  • 查看函数 SUBSTR
  • @Reeza 我尝试了以下,它运行但没有创建变量:proc sql; (Select * From data01 WHERE RDATE between '2000-11-01' and '2018-02-25' (SELECT SUBSTR(REP_ID,4) AS ID) ; quit; 我尝试修改的变量是 rep_id 它应该创建一个名为 ID 的新列,其中 rep_id 的值从第 4 个字符开始
  • 你真的不应该向 cmets 添加代码,你可以编辑你的问题。请在以后这样做。

标签: sql sas truncate


【解决方案1】:

您可以使用 SUBSTR 返回正确的字符串。在SAS中,最后一个参数是可选的,如果你跳过它,它会自动从头到尾检索。

select substr(REP_ID, 4) as ID

如果是 SQL,您的代码将看起来像这样。您的 SQL 有其他几个错误,但我会留给您解决。

如果是数据步骤,请改用以下内容:

ID = substr(REP_ID, 4);

【讨论】:

  • 这正是我所做的,但没有生成新的变量 ID。它只是同一张桌子。可能是什么问题?
  • 那你做错了。发布您的完整代码并记录。
  • 我会确保您的 SQL 查询首先正常工作,然后将其添加为最后一步,就像我提到的那样,您的代码中有其他 SQL 错误使其无效,您需要将其修复为好吧。
【解决方案2】:

你的意思是:

proc sql; 
Select *,
SUBSTR(REP_ID,4) AS ID
From data01 
WHERE RDATE between '2000-11-01' and '2018-02-25' 
; 
quit; 

?

【讨论】:

  • 当我按照你的方式进行操作时,我收到以下错误:“语法错误:SELECT * 必须有 FROM 子句”但我确实包含了 from 子句。所以我真的不知道问题是什么:(
  • 你要不要建表?表data01是否存在?保存在哪里?
  • 您可能需要限定星号:Select data01.*, ...
【解决方案3】:

您可以将 len 函数和 subtr 函数组合在一起来获得结果。

Substr(REP_ID,4,len(REP_ID)-4)

【讨论】:

    【解决方案4】:

    当你想提及时,你只需要为表格添加一个别名*

    proc sql; 
     Select a.*,
    SUBSTR(REP_ID,4) AS ID
    From data01 a
    WHERE RDATE between '2000-11-01' and '2018-02-25' 
    ; 
    quit;
    

    【讨论】:

    • 不需要别名,因为在这种情况下,所有变量都在同一个表中:data01。我认为 krilee 必须验证该表是否真的被命名为“data01”以及该表是否在“工作”库中。如果不是,他必须在前面添加库的名称,例如:如果库名为“thelab”,则使用:From thelab.data01。
    猜你喜欢
    • 2010-11-07
    • 2023-03-22
    • 2019-08-02
    • 2020-02-25
    • 2012-02-10
    • 2022-01-26
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多