SAS - 如何在字符串中查找与指定子字符串相似的变量名

SAS - how to find variable name in string which is similar to a specified sub-string

我想查找字符串中是否存在变量 (&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 字符串中指定的区域变量。这仅在 &fixed 字符串中首先指定 regio 变量时有效,但在这种情况下它是第二个变量,因此这不起作用。我找不到从 &fixed 字符串创建变量(字)计数值以能够使用扫描功能的可靠方法。在这种情况下,我知道它应该是 2。如有任何帮助,我们将不胜感激。

使用数据阶跃函数可以更容易地看到这一点。您要做的是使用 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 以便更容易看到它的工作,当然在生产代码中把它放回去。)