首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以嵌套%sysfunc函数或实现类似的结果吗?

我可以嵌套%sysfunc函数或实现类似的结果吗?
EN

Stack Overflow用户
提问于 2022-10-04 15:19:11
回答 1查看 54关注 0票数 0

我有以下字符串,它们用作变量名(在不同的变体中):

代码语言:javascript
复制
Data variables;
input variable;
datalines;
Exkl_UtgUtl_Flyg 
Exkl_UtgUtl_Tag 
Exkl_UtgUtl_Farja 
Exkl_UtgUtl_Hyrbil 
Exkl_UtgUtl_Bo 
Exkl_UtgUtl_Aktiv 
Exkl_UtgUtl_Annat
;
run; 

为了引用相关变量,我需要将"Exkl_UtgUtl_Flyg“类型的变量转换为"UtgUtl_FlygSSEK_Pers”和"UtgUtl_FlygSSEK_PPmedel".I类型的变量,并尝试在以下宏中这样做,以及其他操作:

代码语言:javascript
复制
%macro imputera_saknad_utgift(variabel);

DATA IBIS3_5;
SET IBIS3_5;
if &variabel=1 and %sysfunc(cats(%qsysfunc(TRANWRD(&variabel,'Exkl_','')),SSEK_Pers))=. then 
        %sysfunc(cats(%qsysfunc(TRANWRD(&variabel,'Exkl_','')),SSEK_Pers))=%sysfunc(cats(%qsysfunc(TRANWRD(&variabel,'Exkl_','')),SSEK_PPmedel));

运行;%修正imputera_saknad_utgift;

文档指出%sysfunc不能嵌套,但是提到了交替的%sysfunc-和%qsysfunc-函数,所以我尝试了一下。然后,我尝试执行以下代码:

代码语言:javascript
复制
data _null_;
    set variabler2;
    call execute(cats('%imputera_saknad_utgift(',utgifter_inte_missing,')'));
run;

然而,这似乎行不通。猫-函数似乎起作用了,但嵌套的TRANWRD-函数却不起作用:

代码语言:javascript
复制
NOTE: DATA statement used (Total process time):
      real time           0.11 seconds
      cpu time            0.12 seconds
      

5         + DATA IBIS3_5; SET IBIS3_5; if Exkl_UtgUtl_Bo=1 and Exkl_UtgUtl_BoSSEK_Pers=. then    
Exkl_UtgUtl_BoSSEK_Pers=Exkl_UtgUtl_BoSSEK_PPmedel;

我该怎么做呢?输出应该类似于:

代码语言:javascript
复制
DATA IBIS3_5; SET IBIS3_5; if Exkl_UtgUtl_Bo=1 and UtgUtl_BoSSEK_Pers=. then    
UtgUtl_BoSSEK_Pers=UtgUtl_BoSSEK_PPmedel;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-04 15:36:52

我认为您的宏变量值中没有引号,因此这段代码将无法工作:

代码语言:javascript
复制
%qsysfunc(TRANWRD(&variabel,'Exkl_',''))

由于它希望将7个字符串'Exkl_'替换为两个字符串'',两个引号相邻。

您可能打算搜索Exkl_。您可能也不想在这里使用%QSYSFUNC(),因为这将保留TRANWRD()将插入的空间。您可以使用%SYSFUNC()来避免将前导空间作为值的一部分。或者使用TRANSTRN()函数代替,因为与TRANWRD()不同的是,该函数可以转换为空字符串而不是单个空格。

示例:

代码语言:javascript
复制
439  %let variable=Exkl_UtgUtl_Flyg ;
440  %put %qsysfunc(TRANWRD(&variable,'Exkl_','')) ;
Exkl_UtgUtl_Flyg
441  %put %qsysfunc(TRANWRD(&variable,Exkl_,)) ;
 UtgUtl_Flyg
442  %put %sysfunc(TRANWRD(&variable,Exkl_,)) ;
UtgUtl_Flyg
443  %put %qsysfunc(TRANSTRN(&variable,Exkl_,)) ;
UtgUtl_Flyg
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73950096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档