簡體   English   中英

SAS-使用全局歸一化因子,不使用宏變量

[英]SAS - Using Global Normalization Factor w/o Using Macro Variable

免責聲明:這主要是因為我有使用宏變量(概述如下)功能的解決方案,因此可能不適合這個網站風格/最佳實踐的問題。

鑒於非標准化的風險評分,例如數據集:

數據集_1:

Person, Score
A, 1.00
B, 4.00
C, 2.35
...

我想規范化算術平均值為1.0。 我可以匯總此數據集,得出平均風險評分,然后將每個觀察結果除以該風險評分。 例如:

程序摘要....; 產生具有一個觀察值的數據集:

數據集_2:

Avg_Score
2.5

然后使用:

Data _null_; Set Dataset_2;
  Call Symput("NormFactor", Avg_Score);
Run;

和:

Data NormalizedScores;
  Set Dataset_1;
  Score_Norm = Score / &NormFactor.;
Run;

然而,這似乎是垃圾代碼給我。 有更好的方法嗎?

如果您想以老式的方式進行操作,那么有比宏變量更好的方法; 只是合並數據集,如果只有一個平均值,則將其設置。 (如果有BY變量,則合並。)

例如:

data dataset_1;
input Person $ Score;
datalines;
A 1.00
B 4.00
C 2.35
;
run;
proc means data=dataset_1 noprint;
  var score;
  output out=dataset_2 mean=avg_score;
run;


Data NormalizedScores;
  set dataset_1;
  if _n_=1 then set dataset_2;
  Score_Norm = Score / avg_score;
Run;

來自SET語句的變量將自動保留,並且由於我們僅讀入第二個數據集一次,因此它們不會被替換或設置為missing。

更光滑的方法是使用PROC STDIZE (這是PROC STANDARD的較新版本),但是我不清楚是否有一種特定的方法可以准確地實現您想要的功能。

嘗試PROC STANDARD

data test;
input Person $ Score;
datalines;
A 1.00
B 4.00
C 2.35
;

proc standard data=test out=test2 mean=1;
var Score;
run;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM