У вас есть две различные проблемы в вашем коде:
- Ваши значения данных имеют котировки в них
- SAS пытается построить цифровой формат, а не формат символов
Кавычки в разделе datalines становятся частью значений переменной, которые вы, вероятно, не собираетесь использовать. Вы должны удалить их, т.е .:
data countries;
input Start $ Label $;
retain FmtName '$countries'; *<-- added $ sign!
datalines;
AU Austr
CH China
;
Как написано, ваш PROC FORMAT оператор создает цифровой формат, страны. SAS пытается преобразовать значения символов в числовые, и вы получите нулевые значения (которые повторяются, таким образом, сообщение об ошибке). Чтобы сообщить SAS, что вам нужен формат символа, вы добавляете префикс $ к имени ($ - фактически часть имени формата). Вы также можете добавить переменную TYPE в набор данных.
Тогда ваш код работает:
proc format library=work.formats fmtlib cntlin=countries;
select $countries;
run;
Опция fmtlib и оператор выбора просто сказать SAS для печати формата (который полезен для отладки иногда). Они не являются обязательными, так что это будет работать:
proc format library=work.formats cntlin=countries;
run;
Тест как:
307 data _null_;
308 length Country $8;
309 do country="AU","CH","USA";
310 put country country $countries.;
311 end;
312 run;
AU Austr
CH China
USA USA
@Quentin Да, это правильно, когда я распечатать его. –
@Quentin Что делает команда «select»? –
@Quentin Я думал, что шаг proc добавил новый формат в библиотеку? Я не вижу ничего необычного в журнале и выходе. –