Лучше всего изменить код, который создает исходные наборы данных, чтобы они создавались в стандартной структуре.
Существует два способа, которыми объединение двух или более наборов данных может привести к усечению символьных переменных (иливидимое усечение).
Первое - это физическое усечение, поскольку переменная определяется на шаге данных короче, чем в одном из исходных наборов данных.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;