SAS:错误尝试更改prxchange中字符串的值

  • 本文关键字:prxchange 字符串 错误 SAS sas
  • 更新时间 :
  • 英文 :


我有此代码:

%global nb_usag;
%global usager_entr;
%let nb_usag=0;
%syslput nb_usag=&nb_usag;
%let usager_entr=u;
PROC SQL noprint ;
    select count(distinct no_usager_entr) into :nb_usag  from &lib..INSCRITS_USA_1
    ;
quit;
data _null_;
    if &nb_usag > 0 then do;
        call execute
            ("PROC SQL noprint ;
            select distinct no_usager_entr INTO :usager_entr separated by ','
            from &lib..INSCRITS_USA_1;")
        ;
        if &usager_entr ne "u" then do;
            call prxchange('s/,/","',-1,&usager_entr);
        end;
    end;
run;
%let usager_entr="&usager_entr";
%syslput usager_entr=&usager_entr;
%put &nb_usag;
%put &usager_entr;

但是代码为函数prxchange生成了此错误:

ERROR 135-185: Attempt to change the value of the constant 's/,/","' in the PRXCHANGE subroutine call.

我做错了什么?

我想用","在变量usager_entr中修改每个。

例如,如果usager_entr = 12121212,34343434,56565656将成为12121212","34343434","56565656

在我的情况下,表& lib..inscrits_usa_1是空的,然后nb_usag = 0。

谢谢!

四处乱逛!而是直接从Proc SQL

创建双引号列表

假定列表将在以后的子句中使用constonct IN (&myList)

%let usager_entr_dq_csv_list = "redundant safety value that will never match anything";
PROC SQL noprint ;
    select distinct quote(trim(no_usager_entr))
    INTO :usager_entr_dq_csv_list separated by ','
    from &lib..INSCRITS_USA_1;

需要冗余值,因为如果它是空的,您以后会生成IN ()并具有语法错误。

如果列表在通过SQL中使用,则需要使用QUOTE函数的其他参数将值与单个报价绑定。

用于从usager_entr = 12121212,343434,56565656到" 12121212"," 3434343434"," 34343434"," 56565656",您可以使用prxchange:

%let usager_entr =12121212,34343434,56565656;
%put &usager_entr;
%let New_usager_entr=%sysfunc(prxchange(s/([1-9]+)/"$1"/, -1,%quote(&usager_entr)));
%put &New_usager_entr;

最新更新