Чтобы преобразовать данные в FORMAT, используйте опцию CNTLIN = в PROC FORMAT.Но сначала убедитесь, что данные описывают правильный формат.Так что прочитайте данные из файла.
data myfmt ;
infile 'myfile.txt' dsd truncover ;
length fmtname $32 start $100 value $200 ;
fmtname = '$MYFMT';
input start value ;
run;
Убедитесь, что длины START и VALUE установлены достаточно большими для любых реальных значений, которые может иметь ваш исходный файл.
Затем убедитесь, чтоон отсортирован, и у вас нет повторяющихся кодов (значения START).
proc sort data=myfmt out=myfmt_clean nodupkey ;
by start;
run;
Журнал SAS покажет, были ли удалены какие-либо наблюдения из-за дублированных значений START.
Если у вас естьдублирующиеся значения затем изучите набор данных или исходный текстовый файл, чтобы понять причину и определить, как вы хотите обрабатывать дубликаты.На шаге PROC SORT, приведенном выше, останется только один из дубликатов.У вас могут быть только точные дубликаты, и в этом случае хорошо хранить только один.Или вы можете объединить повторяющиеся наблюдения в одно наблюдение и объединить несколько декодеров в один длинный декодер.
Если хотите, вы можете добавить запись, которая добавит функциональность ключевого слова OTHER
оператора VALUE
в PROC FORMAT
.Вы можете использовать это для установки значения по умолчанию, такого как «Значение не найдено», для декодирования любого значения, которое может встретиться, которого не было в вашем исходном файле.
data myfmt_final;
set myfmt_clean end=eof;
output;
if eof then do;
start = ' ';
label = 'Value not found';
hlo = 'O' ;
output;
end;
run;
Затем используйте PROC FORMAT для создания форматаиз очищенного файла данных.
proc format cntlin = myfmt_final;
run;
Чтобы преобразовать FORMAT в набор данных, используйте опцию CNTLOUT = в PROC FORMAT.
Например, если вы создали этот формат ранее.
proc format ;
value $myfmt 'ABC'='ABC' 'BCD'='BCD' 'BCD1'='BCD' 'BCD2'='BCD' ;
run;
, тогда вы можете использовать другой шаг PROC FORMAT для создания набора данных.Используйте оператор SELECT, если вы форматируете каталог, в котором определено несколько форматов, и вам нужен только один (или несколько) из них.
proc format cntlout=myfmt ;
select $myfmt ;
run;
Затем вы можете использовать этот набор данных для простого создания текстового файла.Например, файл с разделителями-запятыми.
data _null_;
set myfmt ;
file 'myfmt.txt' dsd ;
put start label;
run;
Результатом будет текстовый файл, который выглядит следующим образом:
ABC,ABC
BCD,BCD
BCD1,BCD
BCD2,BCD