Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 示例33078:如何在任何SAS®中的任何变量中找到特定值;库中的数据集_Search_Sas_Dataset_Libraries - Fatal编程技术网

Search 示例33078:如何在任何SAS®中的任何变量中找到特定值;库中的数据集

Search 示例33078:如何在任何SAS®中的任何变量中找到特定值;库中的数据集,search,sas,dataset,libraries,Search,Sas,Dataset,Libraries,我需要帮助将SAS()中的此代码修改为: 不区分大小写(因此,不要忽略SMITH vs SMITH vs SMITH,我尝试了“upcase”,但它不起作用) 包括一个计数器(以便我可以控制是否知道值第一次出现,以及如果需要,值出现的次数) 允许部分搜索(此代码只允许搜索精确匹配,这意味着我缺少许多可能的变量,可以在这些变量下定义值) 谢谢!:) 假设您正在运行示例中的代码。我将更改比较表达式。 我会把它变成一个宏参数。您可以使用FIND/W/C、正则表达式等 exp=%str(查找(&&v

我需要帮助将SAS()中的此代码修改为:

  • 不区分大小写(因此,不要忽略SMITH vs SMITH vs SMITH,我尝试了“upcase”,但它不起作用)
  • 包括一个计数器(以便我可以控制是否知道值第一次出现,以及如果需要,值出现的次数)
  • 允许部分搜索(此代码只允许搜索精确匹配,这意味着我缺少许多可能的变量,可以在这些变量下定义值)

谢谢!:)

假设您正在运行示例中的代码。我将更改比较表达式。 我会把它变成一个宏参数。您可以使用FIND/W/C、正则表达式等

exp=%str(查找(&&var&j,'-target-','IT')

%取消引用(&exp)以替换带下划线的红色

根据您的评论:

data _null_; 
  set &librf..&&ds&i;
%do j=1 %to &numvars;
   if INDEX(upcase(&&var&j),"&string") >0 then 
/*modified this part to satisfy the first and third things that I wanted*/
      put "String &string found in dataset &librf..&&ds&i for variable &&var&j"
   ; 
%end; 
run;
所以只需添加代码来增加计数器。是否要计算观察值或事件数?也就是说,如果同一个观察有多个点击,它算一个还是多个

计算每次命中次数更容易:

data _null_; 
  set &librf..&&ds&i;
%do j=1 %to &numvars;
   if INDEX(upcase(&&var&j),"&string") >0 then do;
      _count+1;
      put "String &string found in dataset &librf..&&ds&i for variable &&var&j" _count=;
   end; 
%end; 
run;
下面是您如何计算每个观察值的方法

data _null_; 
  set &librf..&&ds&i;
%do j=1 %to &numvars;
   if INDEX(upcase(&&var&j),"&string") >0 then do;
      _hit=1;
      put "String &string found in dataset &librf..&&ds&i for variable &&var&j";
   end; 
%end;
   if _hit then do;
      _count+1;
      put "Number of observations so far=" _count ;
   end; 
run;

您能否展示您尝试的代码,并解释它如何不能实现您想要的功能?现在你的问题听起来像是请求某人为你编写一个应用程序,而不是请求帮助解决编程问题;set&librf..&&ds&i;%do j=1%至&numvar;如果索引(upcase(&&var&j),“&string”)>0,则/*修改此部分以满足我想要的第一件和第三件事*/put“在变量&&var&j的dataset&librf..&&ds&I中找到的字符串和字符串”;%结束;跑仍然很难弄清楚如何在“put”语句中添加计数器,或者让它在找到的第一个变量处停止,而不是重复每一行…谢谢data null,但是您的代码对我来说可能太高级了。我将您用红色下划线的行改为“if INDEX(upcase(&&var&j),“&string”)>0 then”,但现在我一直在思考如何添加计数器,计算在同一变量中找到值的次数,或者让程序只在第一次找到它时报告它……它工作了!谢谢问题:如果我加上“If _countle 1 then”来选择第一次点击,这会使我的程序运行得更快吗?或者我需要退出(离开)do循环吗?当我添加“leave”时,我一直得到这样的信息:“错误477-185:leave/CONTINUE语句在非循环/非迭代DO/END块中无效。”没有要离开的循环。您需要完全运行
%DO
循环来生成所有实际的SAS语句。跳过任何生成的IF语句没有多大价值。在该数据集中找到任何字符串后,是否要停止数据步骤?如果是,则使用
If
语句有条件地运行
STOP
语句。