我有以下字符串,它们用作变量名(在不同的变体中):
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类型的变量,并尝试在以下宏中这样做,以及其他操作:
%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-函数,所以我尝试了一下。然后,我尝试执行以下代码:
data _null_;
set variabler2;
call execute(cats('%imputera_saknad_utgift(',utgifter_inte_missing,')'));
run;然而,这似乎行不通。猫-函数似乎起作用了,但嵌套的TRANWRD-函数却不起作用:
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;我该怎么做呢?输出应该类似于:
DATA IBIS3_5; SET IBIS3_5; if Exkl_UtgUtl_Bo=1 and UtgUtl_BoSSEK_Pers=. then
UtgUtl_BoSSEK_Pers=UtgUtl_BoSSEK_PPmedel;发布于 2022-10-04 15:36:52
我认为您的宏变量值中没有引号,因此这段代码将无法工作:
%qsysfunc(TRANWRD(&variabel,'Exkl_',''))由于它希望将7个字符串'Exkl_'替换为两个字符串'',两个引号相邻。
您可能打算搜索Exkl_。您可能也不想在这里使用%QSYSFUNC(),因为这将保留TRANWRD()将插入的空间。您可以使用%SYSFUNC()来避免将前导空间作为值的一部分。或者使用TRANSTRN()函数代替,因为与TRANWRD()不同的是,该函数可以转换为空字符串而不是单个空格。
示例:
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_Flyghttps://stackoverflow.com/questions/73950096
复制相似问题