Одна удобная функция proc format
- это возможность использовать набор данных для создания формата вместо того, чтобы вводить его вручную.Ваш сценарий кажется идеальным сценарием для этой функции.
В приведенном вами примере несколько небольших изменений в наборе данных "names" приведут его в форму, которую можно прочитать в формате proc.
Например, если я изменю набор данных имен следующим образом ..
data names;
retain fmtname "names" type "N";
input start end label $;
datalines;
1 10 John
11 20 Paul
21 30 George
31 40 Ringo
;
Затем я могу выполнить эту команду, чтобы построить формат на его основе.
proc format cntlin=names;run;
Теперь я могу использовать этот формат так же, как и в любом другом формате.Например, чтобы создать новый столбец, который содержит желаемое «имя» на основе номера, вы можете сделать это:
data numbers;
input number;
number_formatted=put(number,names.);
datalines;
33
21
17
5
;
Вот как будет выглядеть вывод:
number_
number formatted
33 Ringo
21 George
17 Paul
5 John
Обновление по адресу:
Нет большой разницы в кодировании, необходимом для чтения из текстового файла.Нам просто нужно настроить его так, чтобы в выходном наборе данных были определенные имена переменных, ожидаемые в формате proc (fmtname, type, start, end и label).
Например, если у меня есть внешняя запятаяфайл с именем "names.csv", который выглядит следующим образом:
1,10,John
11,20,Paul
21,30,George
31,40,Ringo
Затем я могу просто изменить код, который создает набор данных "names", чтобы он выглядел следующим образом:
data names;
retain fmtname "names" type "N";
infile "<path to file>/names.csv" dsd;
input start end label $;
run;
Теперь я могу запустить proc proc с опцией cntlin, как я делал раньше:
proc format cntlin=names;run;