DATAステップの「SETステートメント」で複数のデータセットを縦に結合することができます。
| DATA     出力データセット; SET データセット1 データセット2 ・・・; RUN;  | 
- 「SET」に結合したいデータセットを列挙
 - 「DATA」に結合後に作成するデータセット名を指定
 
| data DT1; input X Y:$2. Z; cards; 1 aa 10 2 bb 20 ; data DT2; input X Y:$1.; cards; 3 c 4 d ; 
 
  | 
| data OUT1; set DT1; run; 
  | 
- SETに指定されたデータセットと同じ中身のデータセットが作成されます。
 
| data OUT2; set DT1 DT2; run; 
  | 
- SETに指定されたデータセットの順に縦結合されます。
 - SETに指定されたデータセット間で
 - 共通する変数名同士を縦に結合し
 - 片方にしかない変数も残してくれます。
 
| data OUT3; set DT2 DT1; run; 
 ログ WARNING: 入力データセットによって、変数Yに複数の長さが指定されています。 データの切り捨ての原因になります。  | 
- なんかログに WARNING が出ちゃったし、
 - 結合元の DT1 の1行目の Y が「aa」だったのが、結合後「a」になっちゃってる
 - 結合元の DT1 の2行目の Y が「bb」だったのが、結合後「b」になっちゃってる
 
これは以下の重要な性質によるものです
- SETに指定された最初のデータセットの LENGTH が適用される
 
今回の例では、変数Y のLENGTHは
- DT2・・・「1」
 - DT1・・・「2」
 
そして、SETに指定された最初のデータセットは「DT2」なので、結合後の 変数Y のLENGTHは「1」に設定されてしまい、文字切れが起きたというわけですね。
解決策
| data OUT4; length Y $2.; set DT2 DT1; run; 
  | 
- SETの前に「LENGTHステートメント」でLENGTHを再設定してあげればOK