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

时间:2015-09-11 15:16:34

标签: sas sas-macro

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

/* Papervision3D engine setup code here */
//...
var scene:Scene3D = new Scene3D();
//...

var file:FileReference;
function LoadProyect(e:MouseEvent):void
{
    var fd:String = "3Dp Files (*.3dp)";
    var fe:String = "*.3dp";
    var ff:FileFilter = new FileFilter(fd,fe);
    file = new FileReference();
    file.browse(new Array(ff));
    file.addEventListener(Event.SELECT, onFileSelect);
    file.addEventListener(Event.COMPLETE, fileComplete);
}
function onFileSelect(e:Event):void
{
    file.load();
}
function fileComplete(e:Event):void
{
    var aScene:ByteArray = e.target.data;
    var objScene:Object = aScene.readObject();
    scene = objScene as Scene3D;
}

我想创建一个名为regioxc的宏变量,它可以等于任何一个region1,下一次运行宏时它可能等于regiodc或其他东西(总是带有开始字符串&#39) ; regio'),如果这是& fixed字符串中指定的区域变量。这仅在首先在& fixed字符串中指定了regio变量时有效,但在这种情况下它是第二个变量,因此这不起作用。我找不到一种从& fixed字符串创建变量(字)计数值的强大方法,以便能够使用扫描功能。在这种情况下,我知道它应该是2。这里的任何帮助都会非常值得赞赏。

1 个答案:

答案 0 :(得分:0)

使用数据步骤功能更容易看到这一点。您要做的是使用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以便更容易看到它的工作,当然在生产代码中将其重新投入使用。)