【问题标题】:SAS IF THEN Statement for Range of Columns用于列范围的 SAS IF THEN 语句
【发布时间】:2019-03-07 20:29:22
【问题描述】:

我想根据一系列列 (GAP1-GAP5) 创建一个新列。我想用这样的东西:

IF FIND(GAP1-GAP5,'New Start') THEN FILTER_NewStart=1

但出现错误,所以不得不使用这个:

IF FIND(GAP1,'New Start') OR FIND(GAP2,'New Start') OR FIND(GAP3,'New Start') 
  OR FIND(GAP4,'New Start') OR FIND(GAP5,'New Start') THEN FILTER_NewStart=1;

我需要使用循环还是可以对一系列列使用函数来实现这一点?

【问题讨论】:

  • 如果对速度有任何顾虑,array 语句可能会比接受的答案更快。

标签: sas range conditional datastep


【解决方案1】:

尝试连接它们并在变量上使用find

if(find(cat(of GAP1-GAP5), 'New Start') ) then FILTER_NewStart = 1;

【讨论】:

    【解决方案2】:

    听起来您想使用 WHICHC() 函数来查找变量列表中等于特定值的第一个变量。如果没有,则结果为零。

    FILTER_NewStart=0 ne whichc('New Start',of GAP1-GAP5);
    

    FIND() 用于定位较长字符串中的特定子字符串,因此不能同时处理多个变量。

    【讨论】:

      【解决方案3】:

      @Tom whichc() 是个好主意,但如果 GAP1-GAP5 只包含但不等于“新开始”,则它不起作用。 find() 在这种情况下会是一个更好的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-15
        • 2022-01-13
        • 1970-01-01
        • 2013-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多