2017-04-05 13 views
0

変数レベルの数と一意の識別子の出力の変数を取得したいが、現在のところ私の方法は機能しません。私は一意のIDを使用して、1-num_levelsをproc freqから関連付けます。Proc形式への入力にProc Freq変数の出力を使用する

ここ

は私がのproc FREQのために持っているものです。

PROC FREQ DATA=my_data (keep=IDs) nlevels; 
table all/out=out_data; 
%let dim=levels; 
%let IDs; 
run; 

それから私は、マクロ変数を使用しようとしましたが、それはそう、私は良いアイデアを与えるために私のproc形式のマニュアルのバージョンを含めています動作しませんでした達成しようとしているのですが、うまくいって自動化しようとしています。

PROC FORMAT; 
INVALUE INDEX 
"1234" = 1 
"2345" = 2 
. 
. 
. 
"8901" =25; 
/*25 represents the output of the levels 
variable from proc freq but I couldn't figure out how to grab that either*/ 
RUN; 

助けてください。 ありがとうございました!

+1

マクロ変数の代わりにCNTLINデータセットを使用します。 – Reeza

+1

http://www2.sas.com/proceedings/sugi30/001-30.pdf – Reeza

+1

@Reezaが正しいです。手動で作成したフォーマットでCNTLOUTを使用すると、CNTLINデータセットの外観を確認できます – keydemographic

答えて

2

ここでは、これを行うPROC FORMAT CNTLINの方法を示す完全に機能したソリューションがあります。ここでのアイデアは、観測番号で名前をマスクすることです。

*Create list of unique names; 
proc freq data=sashelp.class noprint; 
    table name/out = mask; 
run; 

*create control data set. Variables that need to be set are: 
    fmtname, start, label and type; 

data name_fmt; 
    set mask; 
    fmtname = 'namefmt'; 
    type='J'; 

    *J specified character informat, C would be character format; 
    start=name; 
    label = put(_n_, z2.); *Use the row number as the recoded value; 
run; 

*create the format; 
proc format cntlin=name_fmt; 
run; 

*Sample usage; 
data class; 
    set sashelp.class; 
    name_masked = input(name, $namefmt.); 
    drop name; 
run; 
+0

ありがとうございました!私はあなたが提供したリソースからこれを読んでいました。私はcntlinについて知りませんでした! – hope288

関連する問題