Начнем с ваших выходных данных.
data expect ;
id+1;
length USERKEYED VALMATCH DEVICEVERIFIED EXCEPTION
USERREGISTRD ASSOCIATE EXTERNAL GROSSGIVEN UMAPPED $1 ;
input USERKEYED -- UMAPPED;
cards4;
Y N N N N Y N Y N
Y N N N N Y Y Y N
Y N N Y N Y N Y N
;;;;
Теперь мы можем воссоздать ваш пример ввода данных:
data have ;
do until (last.id);
set expect ;
by id ;
array flag _character_;
length string $200 ;
do _n_=1 to dim(flag);
string=catx(';',string,catx('=',vname(flag(_n_)),flag(_n_)));
end;
end;
keep id string;
run;
Какой будет выглядеть следующим образом:
USERKEYED=Y;VALMATCH=N;DEVICEVERIFIED=N;EXCEPTION=N;USERREGISTRD=N;ASSOCIATE=Y;EXTERNAL=N;GROSSGIVEN=Y;UMAPPED=N
USERKEYED=Y;VALMATCH=N;DEVICEVERIFIED=N;EXCEPTION=N;USERREGISTRD=N;ASSOCIATE=Y;EXTERNAL=Y;GROSSGIVEN=Y;UMAPPED=N
USERKEYED=Y;VALMATCH=N;DEVICEVERIFIED=N;EXCEPTION=Y;USERREGISTRD=N;ASSOCIATE=Y;EXTERNAL=N;GROSSGIVEN=Y;UMAPPED=N
Так, чтобы обработать это нам нужно разобрать пары из переменной STRING
в несколько наблюдений с значениями отдельных пар, разделенных на NAME
и VALUE
переменных.
data middle ;
set have ;
do _n_=1 by 1 while(_n_=1 or scan(string,_n_,';')^=' ');
length name $32 ;
name = scan(scan(string,_n_,';'),1,'=');
value = scan(scan(string,_n_,';'),2,'=');
output;
end;
keep id name value ;
run;
Тогда мы можем использовать PROC TRANSPOSE
преобразовать эти наблюдения в переменные.
proc transpose data=middle out=want (drop=_name_) ;
by id;
id name ;
var value ;
run;
Прочитайте данные с первой переменной как переменной и второй переменной как значения. Затем транспонируйте данные. – Reeza
Является ли строка символьной переменной в наборе данных или в текстовом файле, который вы хотите прочитать? Если он находится в текстовом файле, возможно, вы можете прочитать его с помощью именованного стиля ввода. Но вам нужно знать имена переменных, чтобы написать инструкцию ввода. – Tom
Спасибо за ответы. На данный момент я попытался с помощью строковых функций, и он работает нормально. Несмотря на то, что он работает, код выглядит неудовлетворительным для меня, как в будущем, если в столбец добавлено больше флагов, для этого требуется изменение кода. –