Ваш исходный набор данных содержит элементов данных country
и topic
, закодированных в имя столбца ( метаданные ), вам, вероятно, потребуется транспонировать данные для использования в процедуре SASшаги, которые будут использовать операторы, такие как where
, by
и class
.
Proc TRANSPOSE
, могут поворачивать данные от широких к высоким, и на выходе будет столбец с именем _NAME_
, который можно использоватьв опции where=(where-statement)
в наборе выходных данных.Th where-Statement будет выражением регулярного выражения, в котором ваши списки будут определены как чередующиеся (|
) элементы в группе (например, (item-1|...|item-N)
).Механизм регулярных выражений будет выполнять неявное внешнее соединение, как это делает вложенный цикл в псевдокоде вопроса.Шаблон регулярного выражения будет использовать модификаторы / ix для того, чтобы шаблон был отформатирован для удобочитаемости, который также игнорирует регистр.
Чтобы Proc TRANSPOSE
поворачивал каждую строку набора данных, набор данных должениметь ключ строки (переменную или переменные в комбинации), которые отличаются от строки к строке.
Непроверенный пример:
proc transpose data=have_wide out=want_subset_categorical (where=(
prxmatch("(?ix)/
table2_
%sysfunc(translate(&LIST1.,|,%str( )) (?# list 1 spaces converted to | ors )
_2017_
%sysfunc(translate(&LIST2.,|,%str( )) (?# list 2 spaces converted to | ors )
/",_name_)
));
by <row-key>;
run;