Этот диапазон повторяется или перекрывается - PullRequest
0 голосов
/ 24 декабря 2018

Теперь у меня есть вопрос: у меня есть большая проблема, так как я получаю "этот диапазон повторяется или перекрывается" ... Чтобы быть точным, мои значения метки повторяются, я имею в виду, что мой формат имеет повторяющиеся значения, такие как a = aa b= aa c = как вид.Как мне решить эту ошибку.Когда я использую hlo = M в качестве опции muntilqbel, это дает двойные данные ...

Я отображаю, как показано ниже.Santhan = Santhan Chintu = Santhan

Пожалуйста, предложите решение.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Вы получаете эту ошибку, потому что у вас есть один и тот же код, который отображается на две разные категории.Я предполагаю, что вы, вероятно, неправильно импортировали свои данные из текстового файла и в результате получили некоторые значения усеченными, но без полного процесса это обоснованное предположение.

Это будет нормально работать:

proc format;
value $ test
'a'='aa' 'b'='aa' 'c'='as'
;
run;

Эта версия не будет работать, поскольку a сопоставляется с двумя разными значениями, поэтому SAS не будет знать, какое из них использовать.

proc format;
value $ badtest
'a'='aa'
'a' = 'ba'
'b' = 'aa' 
'c' = 'as';
run;

Это приводит к ошибке, касающейся совпадений в ваших данных.

Способ исправить это - найти дубликаты и определить, к какому коду они должны быть привязаны.PROC SORT может быть использован для получения ваших дубликатов записей.

0 голосов
/ 24 декабря 2018

Чтобы преобразовать данные в 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
...