2017-02-09 8 views
-1

Я просто попытался определить новый формат в студии SAS. Ниже приведен мой код, а сообщение об ошибке - как в заголовке. Может ли кто-нибудь помочь? Большое спасибо![Форматы SAS] ОШИБКА: для форматированных СТРАН этот диапазон повторяется или значения перекрываются: .-

data countries; 
    input Start $ Label $; 
    retain FmtName 'countries'; 
    datalines; 
    'AU' 'Austr' 
    'CH' 'China' 
; 
proc format library=orion.MyMacFmts1 fmtlib cntlin=countries; 
    select $countries; 
run; 
+0

@Quentin Да, это правильно, когда я распечатать его. –

+0

@Quentin Что делает команда «select»? –

+0

@Quentin Я думал, что шаг proc добавил новый формат в библиотеку? Я не вижу ничего необычного в журнале и выходе. –

ответ

-1

У вас есть две различные проблемы в вашем коде:

  1. Ваши значения данных имеют котировки в них
  2. 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