前のページ|次のページ

UPDATEステートメント

トランザクションを適用してマスタファイルを更新します。

該当要素: DATAステップ
カテゴリ: ファイル操作
種類: 実行
注: UPDATEステートメントを使用して読み込まれた値はPDVで保持されます。詳細については、XisError: No pubcode in link data found for lrconおよびRETAINステートメントを参照してください。
注意:
UPDATEステートメントを使用する際にOUTPUTステートメントを追加すると、望ましくない結果が生成されます。

構文

引数

master-data-set

マスタファイルとして使用するSASデータセットを指定します。

範囲 この名前は1レベル名(例:FITNESS)、2レベル名(例:IN.FITNESS)、および特殊SASデータセット名のいずれでもかまいません。
ヒント データセット名を使用するかわりに、オペレーティングシステムでサポートされている構文を使用してファイルの物理パス名を指定することができます。物理パス名は一重引用符または二重引用符で囲む必要があります。
参照項目 XisError: No pubcode in link data found for lrcon

(data-set-options)

DATAステップに処理する変数を読み込むときに実行するアクションを指定します。

要件 Data-set-optionsはSASデータセット名の後に丸かっこで囲んで指定する必要があります。
ヒント データセットを更新する場合、変数の除外、変数の指定、変数名の変更を実行すると便利な場合があります。同じ名前の変数名を変更すると、同じ名前を持つ最初の変数の値が、同じ名前を持つ2番目の変数の値で上書きされるのを回避することができます。このように変数名の1つを変更すると、比較などの処理で両方の変数の値を使用できるようになります。
参照項目 入力データセットで使用するデータセットオプションのリストについては、SASデータセットオプション: リファレンスを参照してください。
変数名を変更する更新

transaction-data-set

マスタデータセットに適用する変更を含むSASデータセットを指定します。

範囲 この名前は1レベル名(例:HEALTH)、2レベル名(例:IN.HEALTH)、および特殊SASデータセット名のいずれでもかまいません。
ヒント データセット名を使用するかわりに、オペレーティングシステムでサポートされている構文を使用してファイルの物理パス名を指定することができます。物理パス名は一重引用符または二重引用符で囲む必要があります。

END=variable

作成する一時変数の名前を指定します。この変数の値には終端指示子が格納されます。この変数の値は0に初期化され、UPDATEステートメントで最後のオブザベーションを処理するときに1に設定されます。この変数はどのデータセットにも追加されません。

UPDATEMODE=MISSINGCHECK

UPDATEMODE=NOMISSINGCHECK

トランザクションデータセットにある変数の欠損値を使用して、マスタデータセットにある既存の変数の値を置き換えるかどうかを指定します。

MISSINGCHECK

トランザクションデータセットにある変数の欠損値を使用して、マスタデータセットにある変数の値を置き換えないように指示します。

NOMISSINGCHECK

トランザクションデータセットにある変数の欠損値を使用して、マスタデータセットにある変数の値を置き換えるように指示します。

デフォルト MISSINGCHECK
ヒント ただし、欠損値が特殊欠損値の場合、MISSINGCHECKは動作しません。MISSINGCHECK(デフォルト値)が指定されている場合でも、マスタデータセットの値は置き換えられます。

詳細

要件

  • UPDATEステートメントは、必ずBYステートメントとともに指定します。BYステートメントには、オブザベーションを識別するための変数を指定します。
  • BYステートメントは適用するUPDATEステートメントの直後に指定する必要があります。
  • UPDATEステートメントにリストされているデータセットは、BYステートメントにリストされている変数の値でソートされているか、適切なインデックスを含んでいる必要があります。
  • マスタデータセットの各オブザベーションには、重複しないBY変数の値が含まれている必要があります。複数のBY変数の値がある場合、その値の最初のオブザベーションのみが更新されます。トランザクションデータセットには、同一のBY変数の値を持つ複数のオブザベーションが含まれていてもかまいません。(複数のトランザクションオブザベーションは、出力ファイルに書き込まれる前に、マスタオブザベーションにすべて適用されます。)
詳細については、XisError: No pubcode in link data found for lrconを参照してください。

トランザクションデータセット

通常、マスタデータセットとトランザクションデータセットには同じ変数が含まれています。ただし、処理時間を短縮するために、更新対象の変数のみを含むトランザクションデータセットを作成することができます。また、トランザクションデータセットには出力データセットに追加する新しい変数を含めることもできます。
出力データセットには、マスタデータセット内のオブザベーションごとに1つのオブザベーションが含まれます。トランザクションデータセットにマスタデータセットと一致しないオブザベーションが存在する場合、一致しないオブザベーションは新しいオブザベーションとして出力データセットに書き込まれます。更新対象ではないオブザベーションはトランザクションデータセットから省くことができます。 XisError: No pubcode in link data found for lrconを参照してください。

欠損値

デフォルトでは、UPDATEMODE=MISSINGCHECKオプションが有効です。そのため、トランザクションデータセットの欠損値によって、マスタデータセットの既存の値は置き換えられません。そのため、すべての変数ではなく一部の変数のみを更新する場合、またオブザベーションごとに更新する変数が異なる場合は、変更しない変数を欠損値に設定します。トランザクションデータに含まれる欠損値でマスタデータセットに含まれる既存の値を置き換える場合は、UPDATEMODE=NOMISSINGCHECKを使用します。
UPDATEMODE=MISSINGCHECKが有効な場合でも、トランザクションデータセットで特殊欠損値の文字を使用すると、既存の値を欠損値に置き換えることができます。特殊欠損値を含むトランザクションデータセットを作成するには、DATAステップでMISSINGステートメントを使用します。トランザクションデータセットにAからZまでの特殊欠損値の1つを定義すると、マスタデータセットに含まれる数値変数はその値に更新されます。
マスタデータセットの値を通常の欠損値に設定する場合は、トランザクションデータセット内でアンダースコア(_)を1つ使用して欠損値を示します。このように指定すると、マスタデータセットの値は、数値の欠損値がピリオド(.)に設定され、文字の欠損値はブランクに設定されます。
特殊欠損値の定義方法および使用方法の詳細については、MISSINGステートメントを参照してください。

比較

  • UPDATEステートメントとMERGEステートメントは、どちらもSASデータセットのオブザベーションを更新します。
  • MERGEステートメントは、最初のデータセットにある既存の値を2番目のデータセットにある欠損値に自動的に置き換えます。ただし、UPDATEステートメントは、デフォルトではこのように動作しません。UPDATEステートメントを使用してマスタデータセットの既存の値をトランザクションデータセットの欠損値で上書きするには、UPDATEMODE=NOMISSINGCHECKを使用する必要があります。
  • UPDATEステートメントでは、トランザクションを適用することによって、マスタファイル内の選択したオブザベーションの値のみを変更したり、更新することができます。UPDATEステートメントでは、新しいオブザベーションを追加することもできます。

例1: 基本的な更新

次のプログラムステートメントでは、マスタデータセット(OHIO.JAN)にトランザクションを適用して、新しいデータセット(OHIO.QTR1)を作成します。BY変数STOREは、OHIO.JANとOHIO.WEEK4の両方に存在し、マスタデータセットでその値は重複しない必要があります。
data ohio.qtr1;
   update ohio.jan ohio.week4;
   by store;
run;

例2: 変数名を変更する更新

この例は、データセットの変数名を変更したため、プログラムデータベクトル内の同じ変数が上書きされないことを示しています。また、各データセットでWEIGHT変数の名前が変更され、新しいWEIGHT変数の値が算出されます。マスタデータセットとトランザクションデータセットは更新を実行するコードの前にリストされています。
Master Data Set                          
            HEALTH                      
OBS    ID     NAME     TEAM    WEIGHT      
 1    1114    sally    blue      125       
 2    1441    sue      green     145       
 3    1750    joey     red       189       
 4    1994    mark     yellow    165
 5    2304    joe      red       170
Transaction Data Set
            FITNESS
OBS   ID     NAME     TEAM    WEIGHT
 1   1114    sally    blue      119
 2   1994    mark     yellow    174
 3   2304    joe      red       170
/*****************************************/ 
data health;
   input ID NAME $ TEAM $ WEIGHT;
   length team $ 6;
   cards;
1114 sally blue   125
1441 sue green   145
1750 joey red    189
1994 mark yellow 165
2304 joe red     170
;
data fitness;
 input ID NAME $ TEAM $ WEIGHT;
   length team $ 6;
   cards;
1114 sally blue  119
1994 mark yellow 174
2304 joe red     170
;
   
   /* Sort both data sets by ID */
proc sort data=health;
   by id;
run;
proc sort data=fitness;
   by id;
run;
   /* Update Master with Transaction */
data health2;
   length STATUS $11;
   update health(rename=(weight=ORIG) in=a)
          fitness(drop=name team in=b);
   by id ;
   if a and b then
      do;
         CHANGE=abs(orig - weight);
         if weight<orig then status='loss';
         else if weight>orig then status='gain';
         else status='same';
      end;
   else status='no weigh in';
run;

proc print data=health2;
   title 'Weekly Weigh-in Report';
run;
変数名を変更する更新
変数名を変更する更新

例3: 欠損値による更新

この例は、マスタデータセットPAYROLLと、通常の欠損値と特殊欠損値を含むデータセットINCREASEを作成するDATAステップを示しています。更新後の値は次のようになります。
  • ID 1026の給与の値は変更されません。
  • ID 1034の給与の値は特殊欠損値になります。
  • ID 1057の給与の値は通常の欠損値になります。
   /* Create the Master Data Set */
data payroll;
   input ID SALARY;
   datalines;
1011 245
1026 269
1028 374
1034 333
1057 582
;
   /* Create the Transaction Data Set */
data increase;
   input ID SALARY;
   missing A _;
   datalines;
1011 376
1026 .
1028 374
1034 A
1057 _
;
   /* Update Master with Transaction */
data newpay;
   update payroll increase;
   by id;
run;
proc print data=newpay;
   title 'Updating with Missing Values';
run;
欠損値による更新
欠損値による更新

関連項目:

XisError: No pubcode in link data found for ledsoptsref
XisError: No pubcode in link data found for lrcon
システムオプション:
XisError: No pubcode in link data found for lesysoptsref
前のページ|次のページ|ページの先頭へ