Я хочу использовать вызов макроса на шаге данных. Ниже приведен макрос и его вызов на шаге данных, но это не работает. Можете ли вы, ребята, предложить вам способ заставить его работать.Как использовать макрос SAS в наборе данных SAS
%macro xscan(string, delimiter, word_number);
%let len1=%length(&string); /*Computing the length of the string*/
%let len=%eval(&len1+1);
%let sub=%scan(&string,&word_number,"&delimiter");
%if &word_number ge 0 %then %do;
%let pos=%index(&string,&sub); /* Locate the position while reading left to right*/
%end;
%if &word_number lt 0 %then %do;
data _null_;
pos=find("&string","&sub",-&len);
call symput("pos",pos);
run;
%end;
%let strg=%substr(&string,&pos); /* Extract the substring*/
%put the string is &strg;
%mend;
data work.in_data;
length in_string $50;
in_string = “a bb ccc dddd bb eeeee”;
output;
in_string = “aa b cc aa dee”;
output;
run;
data work.out_data;
set work.in_data;
length sub_str $50;
start_word_num = -(_n_ +1);
sub_str = %xscan(in_string,’ ‘, start_word_num);
run;
proc print; run;
Вопросов, касающихся проблемы с кодом Вы написали сусло ** описать конкретную проблему ** и включают действительное код для его воспроизведения. См. [SSCCE.org] (http://sscce.org/) для руководства. Это также помогло бы, если бы вы описали, что это ** должно делать **. – JDB
Действительно. Просто сбрасывать ваш код и говорить, что он не работает, недостаточно; это должно быть поставлено как проблема, которая достаточно обобщена, чтобы кто-то другой мог учиться у нее. – Joe
Если вы хотите создать функцию, которая будет использоваться в datastep, посмотрите в «PROC FCMP», а не пытайтесь использовать макрос для этого. Кроме того, перечитайте ответ и комментарии к другому вопросу, который вы задали, потому что похоже, что вы не совсем понимаете, что там было сказано. –