2016-12-08 3 views
-1

私の変数の列ヘッダーの名前を変更して、キーリストにあるものと一致するようにする必要があります。私は自分の持っているものと必要なものを説明するために、以下の写真を添付し​​ました。sasのキーデータベースの後、または最初の行の値の後に列ヘッダーの名前を変更します。

My Data

私はnecesarily実際のコード、それを実現する方法の単なるアイデアを必要としません。 :) あまりにも多くの方々、ありがとうございます、そして、変更については申し訳ありません、前に質問を投稿したことはありません。

+0

はあなたのクエリを投稿することができます:あなたは結果に行として「ネバOtherB diffC」をしたい場合は

SELECT A AS 'NewA', B AS 'OtherB', C AS 'diffC' FROM <<Table>> 

、あなたはこれを行うだろうか? –

+0

どういう意味ですか? – Catnipper

+0

画像リンクを使用するのではなく、質問にテキストを投稿してください。写真を投稿すると、人々があなたのデータと答えを入力することを期待しています。 – Reeza

答えて

2

あなたは

NEW1 NEW2 NEW3
OLDX OLDY OLDZ

のようなテーブルを持っているそして、あなたは

rename oldx=new1 oldy=new2 oldz=new3 ; 

のようなRENAME文を生成するためにそれを使用したい場合次に簡単な方法はPROC TRANSPOSEを使ってそれをseに変換することです名前ペアごとに行をパラメートします。そして、あなたがPROCのSQLを使用するか、あなたに

[_NAME_ COL1
NEW1 OLDX
NEW2 OLDY
NEW3 OLDZ

のようなテーブルを取得します

proc transpose data=have out=names ; 
    var _all_; 
run; 

マクロ変数をペアですばやく生成します。

proc sql noprint; 
    select catx('=',col1,_name_) into :rename separated by ' ' 
    from names; 
quit; 
data new ; 
    set old; 
    rename &rename ; 
run; 

名のリストは単なるテキストファイルにリネーム文を生成し、あなたがしたい場所にそれを実行するためにINCLUDE%を使用してデータステップを使用して、単一のマクロ変数に入れて長すぎる場合。あなたはおそらく、データセットから直接、最後のステップを行うとのproc転置をスキップすることができ

filename code temp; 
data _null_; 
    set names end=eof; 
    file code ; 
    if _n_=1 then put 'rename' ; 
    put col1 '=' _name_ ; 
    if eof then put ';'; 
run; 
data new ; 
    set old; 
    %include code ; 
run; 

EDIT

filename code temp; 
data _null_; 
    set have ; 
    array _X _character_ ; 
    file code ; 
    put 'rename ' @ ; 
    do i=1 to dim(_X); 
    oldname = _x(i); 
    newname = vname(_x(i)); 
    put oldname '=' newname @; 
    end; 
    put/';' ; 
    stop; 
run; 
+0

私は自分のSQLをブラッシュアップする必要があります。これは素晴らしい解決策です。どうもありがとうございます!!! – Catnipper

+0

それを乗り越えることはできません。私は今、とても幸せです。 – Catnipper

0

結果のヘッダー行に表示される内容を変更するために、列別名を使用できます。

SELECT 'NewA' AS 'A', 
     'OtherB' AS 'B', 
     'diffC' AS 'C' 
UNION 
SELECT A, 
     B, 
     C 
FROM <<Table>> 
関連する問題