SAS編程:Compare結(jié)果輸出方式介紹

工作中,雙側(cè)編程會涉及結(jié)果的Compare匿垄,目的是為了確認(rèn)雙側(cè)編程結(jié)果一致移宅。對于不一致的結(jié)果,查明原因后椿疗,進(jìn)行程序更新漏峰。

這一過程中,最先處理的是届榄,數(shù)據(jù)集比較結(jié)果不一致如何展示的問題浅乔。

Compare過程步比較結(jié)果,可以通過以下4種方式進(jìn)行展示:

  1. SAS日志
  2. 自動宏變量SYSINFO的返回值
  3. 過程步的Results輸出
  4. 結(jié)果輸出到數(shù)據(jù)集

1. SAS日志

當(dāng)使用WARNINGPRINTALL靖苇、ERROR選項時席噩,Compare過程步會在SAS日志中輸出不一致的描述。以ERROR選項為例贤壁,演示程序如下:

data base;
  set sashelp.class;
run;

data comp;
  set sashelp.class;

  if _n_ = 1 then height =100;
run;

proc compare base = base comp=comp error;
run;

SAS日志輸出結(jié)果如下:

Log 1

2. 自動宏變量SYSINFO的返回值

Compare過程步運行結(jié)束之后悼枢,會在自動宏變量SYSINFO中返回一個值,這個返回值記錄了比較結(jié)果的信息脾拆。在Compare過程步運行之后以及其他過程步運行之前馒索,通過檢查SYSINFO的返回值,可以獲取不一致的具體描述信息名船。很多公司Compare的宏程序也是利用SYSINFO宏變量輸出比較的結(jié)果绰上。

SAS官方文檔中,對返回值有具體的描述渠驼,Code具體值為2的(n-1)次方蜈块,n對應(yīng)具體描述的位序。(來源:SAS Help Center: Results: PROC COMPARE)

Macro Return Codes

如果在一次比較中迷扇,以上16種情形出現(xiàn)不止一個百揭,那么SAS會輸出各出現(xiàn)情形對應(yīng)Code值的求和

舉例1谋梭,變量值不同:

data base;
  set sashelp.class;
run;

data comp;
  set sashelp.class;

  if _n_ = 1 then height =100;
run;

proc compare base = base comp=comp;
run;

%let comres=&sysinfo.;
%put Compare resulst code: &comres.;

日志輸出如下:

Log 2

輸出結(jié)果為4096信峻,對應(yīng)第13種情況(2的12次方),A value comparision was unequal瓮床。

舉例2盹舞,變量值以及Label不同:

data base;
  set sashelp.class;
run;

data comp;
  set sashelp.class;

  if _n_ = 1 then height =100;
  label weight = "W";
run;

proc compare base = base comp=comp;
run;

%let comres=&sysinfo.;
%put Compare resulst code: &comres.;

日志輸出如下:

Log 3

輸出結(jié)果為4128,4096+32隘庄,對應(yīng)第6和第13種情形踢步,Variable has different labelA value comparison was unequal丑掺。

關(guān)于多種情形如何定位區(qū)分的問題获印,SAS文檔中提供了一種二進(jìn)制匹配確認(rèn)的方法

%let rc=&sysinfo;
data _null_;
/* 1. Test for data set label */
   if &rc = '1'b then
      put '<<<< Data sets have different labels';
/* 2. Test for data set types */
   if &rc = '1.'b then
      put '<<<< Data set types differ';
/* 3. Test for variable informats */
   if &rc = '1..'b then
      put '<<<< Variable has different informat';
/* 4. Test for variable formats */
   if &rc = '1...'b then
      put '<<<< Variable has different format';
/* 5. Test for length */
   if &rc = '1....'b then
      put '<<<< Variable has different lengths between the base data set 
      and the comparison data set';
/* 6. Test for label */
   if &rc = '1.....'b then
      put '<<<< Variable has different label';
/* 7. Test for base observation */
if &rc = '1......'b then
      put '<<<< Base data set has observation not in comparison data set';
/* 8. Test for comparison observation */
   if &rc = '1.......'b then
      put '<<<< Comparison data set has observation not in base';
/* 9. Test for base BY group */
if &rc = '1........'b then
      put '<<<< Base data set has BY group not in comparison';
/* 10. Test for comparison BY group */
   if &rc = '1.........'b then
      put '<<<< Comparison data set has BY group not in base';
/* 11. Variable in base data set not in compare data set */
   if &rc ='1..........'b then 
      put '<<<< Variable in base data set not found in comparison data set';
/* 12. Comparison data set has variable not in base data set */
   if &rc = '1...........'b then
      put '<<<< Comparison data set has variable not contained in the 
      base data set';
/* 13. Test for values */
   if &rc = '1............'b then
      put '<<<< A value comparison was unequal';
/* 14. Conflicting variable types */
   if &rc ='1.............'b then
      put '<<<< Conflicting variable types between the two data sets 
      being compared';
/* 15. Test for BY variables */
   if &rc = '1..............'b then
      put '<<<< BY variables do not match';
/* 16. Fatal error*/
   if &rc ='1...............'b then
      put '<<<< Fatal error: comparison not done';
run;

上一個Compare過程步返回結(jié)果為4128,運行以上代碼后街州,SAS日志顯示如下兼丰,所有不一致情形都會輸出。SAS這樣設(shè)計很巧妙唆缴,每一個返回值對應(yīng)的情形都能夠清晰輸出鳍征。

Log 4

3. 過程步的Results輸出

在SAS中運行Compare過程步后,Results頁面也會有輸出結(jié)果的匯總面徽,匯總的內(nèi)容有以下幾種:

  • Data Set Summary
  • Variables Summary
  • Observation Summary
  • Values Comparison Summary
  • Value Comparison Results
  • Table of Summary Statistics
  • Comparison Results for Observations (Using the TRANSPOSE Option)

示例代碼:

data base;
  set sashelp.class;
run;

data comp;
  set sashelp.class;

  if _n_ = 1 then height =100;
  label weight = "W";
run;

proc compare base = base comp=comp;
run;

Results頁面結(jié)果如下:

Results

Results頁面中的內(nèi)容也可以輸出到外部文檔中:

ods rtf file = "E:\99_Test\Test\Compare_results.rtf";

proc compare base = base comp=comp;
run;

ods rtf close;

結(jié)果輸出到指定目標(biāo)文件中:

RTF

外部文件內(nèi)容截取部分:

RTF 2

關(guān)于如何保留或刪除特定匯總結(jié)果艳丛,具體參考SAS官方文檔: SAS Help Center: Results: PROC COMPARE匣掸。

4. 結(jié)果輸出到數(shù)據(jù)集(out=選項)

這個方式在之前的文章中介紹過,具體參考SAS編程:分享數(shù)據(jù)集Compare的小經(jīng)驗氮双,輸出的結(jié)果數(shù)據(jù)集為碰酝,相比較兩個數(shù)據(jù)集變量值不同的記錄。

我常用的選項設(shè)置如下:

proc compare base = base comp = comp out=df 
    outbase outcomp outdif outnoequal;
run;

輸出數(shù)據(jù)集結(jié)果如下:

Dataset

總結(jié)

文章介紹了戴差,SAS中Compare過程步結(jié)果輸出的4種方式送爸,讀者可以結(jié)合自己的工作需求,進(jìn)行“私人定制”造挽。

同時碱璃,各家公司Compare宏程序大都也是基于以上幾種方式進(jìn)行輸出弄痹,希望能夠幫助讀者理解本公司宏程序運行機(jī)制饭入。

感謝閱讀, 歡迎關(guān)注肛真!
若有疑問谐丢,歡迎評論交流!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚓让,一起剝皮案震驚了整個濱河市乾忱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌历极,老刑警劉巖窄瘟,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異趟卸,居然都是意外死亡蹄葱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門锄列,熙熙樓的掌柜王于貴愁眉苦臉地迎上來图云,“玉大人,你說我怎么就攤上這事邻邮】⒖觯” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵筒严,是天一觀的道長丹泉。 經(jīng)常有香客問我,道長鸭蛙,這世上最難降的妖魔是什么摹恨? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮规惰,結(jié)果婚禮上睬塌,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好揩晴,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布勋陪。 她就那樣靜靜地躺著,像睡著了一般硫兰。 火紅的嫁衣襯著肌膚如雪诅愚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天劫映,我揣著相機(jī)與錄音违孝,去河邊找鬼。 笑死泳赋,一個胖子當(dāng)著我的面吹牛雌桑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祖今,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼校坑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了千诬?” 一聲冷哼從身側(cè)響起耍目,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徐绑,沒想到半個月后邪驮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡傲茄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年毅访,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烫幕。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡俺抽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出较曼,到底是詐尸還是另有隱情磷斧,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布捷犹,位于F島的核電站弛饭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏萍歉。R本人自食惡果不足惜侣颂,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枪孩。 院中可真熱鬧憔晒,春花似錦藻肄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至从撼,卻和暖如春州弟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背低零。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工婆翔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掏婶。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓啃奴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親气堕。 傳聞我的和親對象是個殘疾皇子纺腊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容