【问题标题】:SAS - how to find variable name in string which is similar to a specified sub-stringSAS - 如何在字符串中查找与指定子字符串相似的变量名
【发布时间】:2015-09-11 15:16:33
【问题描述】:

我想查找一个变量是否存在于字符串中(&fixed),如果存在,是哪个字号。

%LET fixed = %STR(variable1 region1 variable3);

%IF %INDEX(&fixed, regio) %THEN
  %DO;
    %LET regioxc = %SCAN(&fixed, %SYSFUNC(FIND(&fixed, regio)));
  %END;

我想创建一个名为 regioxc 的宏变量,它可能一次等于 region1,下一次运行宏时,它可能等于 regiodc,或其他值(始终以开头字符串 'regio' ),如果这是在 &fixed 字符串中指定的区域变量。这只适用于 regio 变量首先在 &fixed 字符串中指定的情况,但在这种情况下它是第二个变量,所以这不起作用。我找不到从 &fixed 字符串创建变量(字)计数值以便能够使用扫描功能的稳健方法。我知道它应该是 2,在这种情况下。非常感谢这里的任何帮助。

【问题讨论】:

  • 您能否提供一些示例输入和结果?我很难准确理解您在这里要做什么。
  • 抱歉,这很乱,不知道如何分行。我想要结束的是: %LET fixed = %STR(variable1 region1 variable3); %IF %INDEX(&fixed, regio) %THEN %DO; %LET regioxc = %SCAN(&fixed, 2); %结尾; &regioxc = 区域 1。下次运行时,固定字符串已更改为以下内容: %LET fixed = %STR(variable1 regio44 variable3); %IF %INDEX(&fixed, regio) %THEN %DO; %LET regioxc = %SCAN(&fixed, 2); %结尾; &regioxc = regio44.
  • 下一次可能是 %LET fixed = %STR(var1 var2 regioxxd); SCAN 的值需要找到这个区域变量,所以在这种情况下它应该是 3。
  • 您可以通过将其编辑到问题中来将其放在单独的行中:) 一个很好的例子是在表格或 SAS 代码中具有三个或四个输入字符串和三个或四个等效的所需输出。

标签: sas sas-macro


【解决方案1】:

使用数据步进函数更容易看到这一点。您要做的是使用index 结果通知substring,然后在该子字符串上使用scan。这样它总是是第一个词。 scan 寻找哪个单词,记住,而不是哪个位置。如果您 find 输入整个单词,则可以使用 findwindexw,但由于您只找到单词的一部分但希望返回整个单词,因此您不能这样做。

data want;
  fixed="variable1 region1 variable3";
  if index(fixed,"regio") then do;
    regioxc = scan(substr(fixed,index(fixed,"regio")),1);
  end;
  put _all_;
run;

在宏变量中你仍然可以这样做:

%LET fixed = %STR(variable1 region1 variable3);

    %LET regioxc = %SCAN(%substr(&fixed,%index(&fixed,regio)),1);

%put &=regioxc;

(我省略了 %if 以便更容易看到它的工作,当然在生产代码中将其放回。)

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 2023-03-29
    相关资源
    最近更新 更多