Я работаю над набором данных, который имеет следующую структуру:
Color Apple Orange Grape Avocado Blueberry
Yellow 1 . . . .
Orange . 1 . . .
Purple . . 1 . 1
Я хочу написать макрос, который создает таблицу для каждого типа фруктов, выбирая все цвета (строки) со значением 1. Например, таблица для яблока TBL_APPLE будет иметь 4 строки, как показано ниже.
В настоящее время я думаю, что перебираю как строки, так и столбцы. В качестве первого шага я превратил все переменные строк и столбцов в макросы:
/*rows*/
proc sql noprint;
select count(*) into :Nobs
from work.fruit;
select Color into :Attr1-:Attr%left(&Nobs)
from work.fruit;quit;
/*columns*/
proc contents data=work.fruit out=contents noprint; run;
%let n=&sqlobs;
proc sql; select name into :fruit1-fruit%left(&n) from contents; quit;
%macro fruit;
%do i=1 %to &NObs;
%do j=1 %to &n;
proc sql;
create table tlb_&&fruit&j as
select *
from work.fruit
where &n = &n;
quit;
%end;
%end;
%mend fruit;
%fruit;