0

私のSASの理解は非常に初歩的です。私はこのようなことをしようとしていますが、助けが必要です。

Col1 が CITY を格納し、Col2 が MILES を格納する 20,000 の観測値を持つプライマリ データセット A があります。Col2 には多くの欠損データが含まれています。以下に示すとおりです。

+----------------+---------------+
|       Col1     |    Col2       |
+----------------+---------------+
|  Gary,IN       |       242.34  |
+----------------+---------------+
| Lafayette,OH   |       .       |
+----------------+---------------+
|   Ames, IA     |       123.19  |
+----------------+---------------+
|  San Jose,CA   |       212.55  |
+----------------+---------------+
| Schuaumburg,IL |       .       |
+----------------+---------------+
| Santa Cruz,CA  |       454.44  |
+----------------+---------------+

別のセカンダリ データセット B があり、これには約 5000 の観測があり、Col1 に CITY が格納され、Col2 に MILES が格納されているデータセット A と非常によく似ています。ただし、このデータセット B では、Col2 に欠損データは含まれていません。

+----------------+---------------+
|       Col1     |    Col2       |
+----------------+---------------+
| Lafayette,OH   |       321.45  |
+----------------+---------------+
|  San Jose,CA   |       212.55  |
+----------------+---------------+
| Schuaumburg,IL |       176.34  |
+----------------+---------------+
| Santa Cruz,CA  |       454.44  |
+----------------+---------------+

私の目標は、col1 の都市名を照合することにより、データセット B のマイルに基づいてデータセット A の不足しているマイルを埋めることです。

この例では、データセット B からデータセット A に 321.45 を入力しようとしています。同様に、2 つのデータセット間で Col1 (都市名) を照合して 176.34 を入力しようとしています。

SASでこれを行うには助けが必要です

4

2 に答える 2

1

Pekka のソリューションは完全に機能しています。完全を期すために別のソリューションを追加します。

SASPROC SQLでは、a を使用すると、ステップと比較して一部のパッセージをスキップできる場合がありDATA(ストレージ リソースと計算時間が相対的に向上します)、aMERGEは典型的な例です。

ここでは、両方の入力データセットの並べ替えと変数の名前変更の処理を回避できます (ここでは、一致するキーは同じ名前col1ですが、一般的にはそうではありません)。

proc sql;
    create table want as
    select A.col1,
            coalesce(A.col2,B.col2) as col2
        from A left join B
            on A.col1=B.col1
        order by A.col1;
quit;

このcoalesce()関数は、引数リストで検出された最初の欠落していない要素を返します。

于 2014-08-18T08:34:54.420 に答える
1

2 つのデータセットをマージするだけです。Col1 の値は、2 つのデータセットで正確に一致する必要があることに注意してください。

また、Col1 はデータセット B で一意であると想定しています。それ以外の場合は、使用する値をより正確に伝えるか、重複を削除する必要があります (たとえば、proc sort ステートメントに nodupkey を追加することによって)。

SAS でマージする方法の例を次に示します。

proc sort data=A;
    by Col1;

proc sort data=B;
    by Col1;

data AB;
    merge A(in=a) B(keep=Col1 Col2 rename=(Col2 = Col2_new));
    by Col1;
    if a;
    if missing(Col2) then Col2 = Col2_new;
    drop Col2_new;
run;

これには、データセット A のすべての観測値と列が含まれます。Col2 が A にない場合は、B の値を使用します。

于 2014-08-16T19:07:48.307 に答える