0

footableを入力として使用し、出力データセットのレコードと 1 対 1 で対応する新しい SAS データセットを生成したいと考えていますbarfooデフォルトでから変数を削除したいのですが、 foo(新しい変数を導出するために) のすべてのフィールドを使用可能にする必要があり、 foo(明示的に指定されている場合) からのいくつかの変数を保持することも必要です。

現在、変数の明示的なリストを管理してdrop=いますが、data-set-option 宣言の構文が長くて扱いにくいものになります。

DATA bar (drop=id data_value2);
set foo;

new_id                 = id;
data_value1            = data_value1;     /* Explicitly included for clarity */
new_derived_data_value = data_value2 * 2; /* etc. */

format new_id                  $fmt_id.
       data_value1             $fmt_dat.
       new_derived_data_value  $fmt_ddat.
;
RUN;

必要な出力テーブルには、フィールドdata_value1new_dataおよびのみが必要ですnew_derived_data_value

と同じ効果を再現する最も構文的に簡潔な方法を探しています:

SELECT 
  id AS new_id
  ,data_value1
  ,data_value2 * 2 AS new_derived_data_value 
FROM foo

DATAデータセット内で明示的に定義したものを除いて、入力データセットからすべての変数を削除するステップを作成するにはどうすればよいですか?

* 更新:aaa--hhh型表記を使用することもできますが、変数の順序が時間の経過とともに変化する場合や、後で variable を保持したい場合は、これでも扱いにくい場合がありますddd

4

2 に答える 2

3

DICTIONARY テーブルから取得したマクロ リストに変数名を格納します。その後、データ ステップでそれらをすべて簡単に削除できます。例えば

proc sql noprint;
select name into :vars separated by ' '
from dictionary.columns
where libname = 'SASHELP' and memname='CLASS';
quit;

data want (drop=&vars.);
set sashelp.class;
name1=name;
age1=age;
run;
于 2014-09-11T14:41:34.743 に答える
1

Keith のソリューションは本番環境での最適なソリューションですが、データセットの最初と最後の変数を知っていると仮定した場合の簡単な代替案です。

data want;
  set class;
  drop name--weight;
  name1=name;
  age1=age;
run;
于 2014-09-11T14:48:26.790 に答える