Я начну с некоторого примера. У меня есть переменная «школы», например «Гарвард и Оксфорд», «только Гарвард» и т. Д. Я хочу найти переменную «школы» только в тех случаях, которые содержат только одно название школы (переменная «место»). У меня есть переменная «place» в наборе данных «bbb», которую я помещаю в listplace («harvard! Oxford! Wse»), переменная «мнение», которую я помещаю в «листопинион» («8! 8! 9), и переменная« страна », которую я помещаю в listcountry( "США! ик! Франция"). Я хочу сделать макрос, который находит в «школах» переменную только этих случаев, которая содержит два школьных названия (zm1). Затем я хочу добавить к ним соответствующий пункт из списка и списка. «Место» - это название школы, «мнение» - это средний показатель, а «страна» - источник этого показателя.
Это мой первый набор данных: «Место» - «Гарвард» 8 «США» - «Оксфорд» 8"uk" - "wse" 9 "Франция"
Это мой второй набор данных:
школы - лучше всего Гарвард - должен быть выбран только Гарвард - у нас нет никаких значений - торт
Это то, что я хочу получить в качестве результатов моего кода (только два наблюдения, а не четыре, как в переменной "школы"):
страна мнения школы - "Гарвард очень особенный" 8 "США"-" должен быть выбран только гарвард "8" сша "
Как я могу заставить три% делать до тех пор, пока не получится цикл с операторами% let?
data aaa;
input schools;
datalines;
"harvard and oxford"
"only harvard should be chosen"
"cheese, cake, pizza"
"we dont't have any values"
;
run;
data bbb;
input place opinion country;
datalines;
"harvard" 8 "usa"
"oxford" 8 "uk"
"wse" 9 "france"
;
run;
data ccc;
set
proc sql noprint;
select opinion
into :listopinion separated by "!"
from aaa
;
run;
quit;
proc sql noprint;
select country
into :listcountry separated by "!"
from aaa
;
run;
quit;
proc sql noprint;
select place
into :listplace separated by "!"
from aaa
;
run;
quit;
%let i_1 =1;
%let i_2 =1;
%let i_2 =1;
%do %until (%qscan(&listplace,&i_1,'!') = %str());
%do %until (%qscan(&listopinion,&i_2,'!') = %str());
%do %until (%qscan(&listcountry,&i_3,'!') = %str());
%let zm1=%scan(&listplace,&i_1,'!');
find(school,"&zm1")=1 or
%let zm2=%scan(&listopinion,&i_2,'!')
%let zm3=%scan(&lista3,&i_3,'!');
%let i_3=%eval(&i_3+1);
%end;
%let i_2=%eval(&i_2+1);
%end;
%let i_1=%eval(&i_1+1);
%end;
run;