Значения усечения шага данных SAS - PullRequest
0 голосов
/ 18 июня 2019

У меня есть серия наборов данных, которые создаются путем извлечения информации из базы данных с помощью операторов pro sql. Есть одно поле (Measure), в котором я использую оператор case для создания «определения» сортов. Затем я использую шаг данных для объединения этих различных наборов данных. Однако это поле усекается, когда набор данных объединяет их (складывает их).

пример: следующий текст «Баланс портфеля (с эко-зарядкой)» усекается до «Баланс портфеля (с эко-зарядкой выключен») или «Объем приложения усекается до« Объем приложения ».

Ниже приведен оператор шага данных. Я попытался использовать формат и длину, чтобы заставить число символов, но он все еще усекает значения. Я также создал фиктивный набор данных 'placeholder', в котором были значения из 50 символов, чтобы убедиться, что самое длинное значение в наборах данных было в начале, но это тоже не помогло.

DATA Data.COMBINED;

format measure  $45.;
SET
Data.PLACEHOLDERS 
Data.GSK
DATA.SSS
DATA.MF
DATA.SRT

;
RUN;

Опять же, если я посмотрю на возвращенные результаты для всех данных, возвращенных в протоколах proc sql, будут показаны полные значения. Только когда я пытаюсь объединить / сложить их вместе в наборе данных, они начинают усекаться. Мысли?

1 Ответ

3 голосов
/ 19 июня 2019

Лучше всего изменить код, который создает исходные наборы данных, чтобы они создавались в стандартной структуре.

Существует два способа, которыми объединение двух или более наборов данных может привести к усечению символьных переменных (иливидимое усечение).

Первое - это физическое усечение, поскольку переменная определяется на шаге данных короче, чем в одном из исходных наборов данных.SAS определит переменную в первый раз, когда увидит ее.Таким образом, если первый набор данных имеет MEASURE с длиной $ 20, то именно так он и определяется.Решение этой проблемы аналогично вашей попытке, только вы должны использовать оператор LENGTH или ATTRIB для явного определения длины переменной вместо того, чтобы заставлять SAS угадывать, как вы хотите определить переменную, исходя из того факта, чтопеременная сначала появляется в операторе FORMAT.

Второе усечение может быть именно в том, как отображаются значения.Если у вас есть прикрепленный формат с шириной, которая меньше, чем длина переменных, тогда значения будут отображаться усеченными в выводе, даже если они на самом деле не усечены.Это особенно вероятно при создании набора данных путем извлечения из внешних баз данных, поскольку PROC SQL автоматически назначит формат, соответствующий длине переменной.Для символьных переменных самое простое решение - просто удалить эти форматы из символьных переменных.SAS не нужно, чтобы они знали, как отображать значения.

data combined;
  length var1 $40 var2 $20 ;
  set gks mf ;
  format _character_ ;
run;

На самом деле PROC SQL довольно хорошо справляется с проблемами длины.Возможно, было бы проще объединить наборы данных таким образом.

proc sql;
create table combined as
  select * from gks
  union corr all
  select * from mf 
;
quit;
...