Переменная SAS Macro с запятыми для преобразования в одинарные кавычки с запятыми

Может ли кто-нибудь помочь мне, как я могу получить макрос-переменную с одинарными кавычками.

Я получаю числа в виде значений, разделенных запятыми, из набора данных, как показано ниже:

2108008080, 2108008081, 2108888082, 2108858090, 213856345 и т. Д. Я должен передать каждую из этих записей в SQL, где условие как Phone_numbers в (¤t_macro_variable). Для этого мне нужно добавить одинарные кавычки вокруг каждого значения, поскольку столбцы Phone_numbers являются символьным полем Oracle DB.

Любая помощь высоко ценится. Я не мог получить большую помощь от сообществ SAS.

3 ответа

Решение

Вы пробовали CATQ() функционировать? Использовать 1 модификатор для генерации одинарных кавычек. Использовать a модификатор, чтобы получить все условия цитируются. Использовать c модификатор для генерации запятых в качестве выходного разделителя.

%let x=2108008080, 2108008081, 2108888082, 2108858090, 213856345;
%put %sysfunc(catq(1ac,&x));

Который производит:

'2108008080','2108008081','2108888082','2108858090','213856345'

Использование PROC SQL и select ... into синтаксис:

/ * Построить список цитируемых телефонных номеров, разделенных запятой * /
proc sql;
  выделите кошек ("'", phone_number, "'") в:PHONELIST через ',' 
  из фонеданных;
уволиться;

/ * Затем передайте его в ваш запрос Oracle... * /
proc sql;
  выберите переменную
  из ora.table
  где телефон в (&PHONELIST);
уволиться;

Функция цитаты должна делать свое дело. Вы должны просмотреть все слова в строке и добавить кавычки.

%let macroVar = %str(2108008080, 2108008081, 2108888082, 2108858090, 213856345);

data _null_;
    n = count("&macroVar",",");
    length 
        quotedword $2000.;
    quotedword = "";
    do i = 1 to n+1;
        word = scan("&macroVar",i,",");
        y = quote(compress(word));
        quotedword = strip(quotedword) || "," || strip(y);
    end;
    quotedword = substr(quotedword,2); /* removing first comma from beginning */
    call symputx("macroVarUpdated",quotedword);
run;

%put &macroVar;
%put &macroVarUpdated;
Другие вопросы по тегам