Statistics 板


LINE

感謝tew大所提供的方法我做出來了 (我也試了一下west1996大所提供的方法二,不過在macro很多層時,會亂掉) 不過現在遇到了其他的問題 問題一: 當沒有綠色的那些程式碼時,他可以跑出兩個檔 但當加上去時,就會出現錯誤 ERROR: File WORK.DATA.DATA does not exist. 但我完全看不出這是啥錯,我程式也沒去用到DATA.DATA這個檔,怎麼會有這行? 問題二: 有沒有讓錯誤log可以更清楚的方式或是對照表? 不然像這次,出現這行我完全看不出是啥原因@@ %INCLUDE "G:\pgm\util\CD_LAYOUT.sas"; Libname a 'G:\pgm\test\output'; %MACRO CD_MERGE; DATA a.CD_ALL; SET %DO i=1996 %TO 1996; %DO j =1 %TO 2; %IF &j < 10 %THEN %LET k = 0&j; %ELSE %LET k = &j; %LOCAL input output; %LET input = "G:\pgm\test\data\CD&i.&k..DAT"; %LET output = "G:\pgm\test\output\CD&i.&k."; %CD_LAYOUT(&i , &input ,&output); &output; %END; %END; ; RUN; %MEND; %INCLUDE "G:\pgm\bo\CD1996_2003.sas"; %INCLUDE "G:\pgm\bo\CD2004_9999.sas"; %MACRO CD_LAYOUT (year , input , output); %IF &year <= 2003 %THEN %CD1996_2003(&input, &output); %ELSE %CD2004_9999(&input, &output); %MEND; %MACRO CD1996_2003 (input,output); DATA &output; INFILE &input lrecl=42 missover; INPUT FEE_YM $1-6 APPL_TYPE $7 HOSP_ID $8-41 RUN; %MEND; --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.94.201 ※ 編輯: Maninck 來自: 118.168.94.201 (08/01 19:34)
1F:推 west1996:%cd_layout裡面是啥?感覺你語法寫錯了,確定set後面是吐 08/01 23:00
2F:→ west1996:出一個data name嗎? 08/01 23:00
3F:→ west1996:macro在debug時可先宣告options mprint mlogic symbolgen 08/01 23:01
4F:→ west1996:這三個(或部分),這樣在log檔裡面就可以看出你的每一個 08/01 23:02
5F:→ west1996:macro variable被解譯成什麼東西 08/01 23:03
cd_layout裡面是把input做成output(已補上程式碼) 我加了全部的log,只發現他是在傳到CD1996_2003要做藍色那行出錯 但還是看不出來為啥會出這個錯〒△〒 LOG如下: MLOGIC(CD_LAYOUT): %IF condition &year <= 2003 is TRUE MLOGIC(CD1996_2003): Beginning execution. SYMBOLGEN: Macro variable INPUT resolves to "G:\pgm\test\data\CD199601.DAT" SYMBOLGEN: Macro variable OUTPUT resolves to "G:\pgm\test\output\CD199601" MLOGIC(CD1996_2003): Parameter INPUT has value "G:\pgm\test\data\CD199601.DAT" MLOGIC(CD1996_2003): Parameter OUTPUT has value "G:\pgm\test\output\CD199601" SYMBOLGEN: Macro variable OUTPUT resolves to "G:\pgm\test\output\CD199601" MPRINT(CD1996_2003): DATA "G:\pgm\test\output\CD199601"; ERROR: File WORK.DATA.DATA does not exist. SYMBOLGEN: Macro variable INPUT resolves to "G:\pgm\test\data\CD199601.DAT" ※ 編輯: Maninck 來自: 118.168.92.4 (08/02 08:08)
6F:推 west1996:藍色的data後面要用libname.dataname的格式,不能直接使 08/02 10:21
7F:→ west1996:用系統路徑的格式 08/02 10:21
8F:→ west1996:data &output改成data a.CD&i.&k. 08/02 10:24
9F:→ Maninck:可是~~為什麼在沒有綠色那些字~~卻可以執行~~而且有檔案產 08/02 19:48
10F:→ Maninck:生@@ 08/02 19:48
11F:→ Maninck:對了~~我忘了說~~這三隻macro都是在不同程式裡@@ 08/02 20:12
12F:→ Maninck:所以我才要把檔名從外面一直傳進去 08/02 20:14
13F:→ west1996:其實...感覺上比較像是你對基本的data step的語法結構就 08/03 00:51
14F:→ west1996:不是很瞭解,就想要使用macro語法,有一點小孩開大車的感 08/03 00:53
15F:→ west1996:覺。另外,macro的整個結構改得很怪,只是不知道是不是你 08/03 00:54
16F:→ west1996:實務上真的必需要拆成這些元件,因為macro的切斷點和引數 08/03 00:55
17F:→ west1996:的傳遞都有點亂@@ 08/03 00:55
18F:→ west1996:可以試著先把所有的macro變數拿掉,用一個special case去 08/03 00:57
19F:→ west1996:跑跑看一般的data step,應該會發現也是不能跑,因為問題 08/03 00:58
20F:→ west1996:是出在data step的結構錯誤,跟macro其實沒有關係 08/03 00:58
21F:→ Maninck:哈哈~~我才剛寫不到一個星期,因為我看他說macro類似巨集 08/03 07:18
22F:→ Maninck:所以我就想試試可不可以跟一般程式的寫法一樣~~可以傳參數 08/03 07:19
23F:→ Maninck:和return值 08/03 07:19
我大概知道錯在哪了~~ 我猜應該是marco的處理程序和一般的程式不一樣 marco他只是把程式合在一起,並不是會先處理。 所以原本的寫法 他會看成下面的程式藍綠色是%MACRO CD_LAYOUT 黃色是%MACRO CD1996_2003 這樣就會變成DATA SET DATA這種錯誤語法的狀況 因此在一開始沒加DATA(紅色那句)時並不會出錯,加了才會出錯。 SAS自動轉換成的程式 %INCLUDE "G:\pgm\util\CD_LAYOUT.sas"; Libname a 'G:\pgm\test\output'; %MACRO CD_MERGE; DATA a.CD_ALL; SET %DO i=1996 %TO 1996; %DO j =1 %TO 2; %IF &j < 10 %THEN %LET k = 0&j; %ELSE %LET k = &j; %LOCAL input output; %LET input = "G:\pgm\test\data\CD&i.&k..DAT"; %LET output = "G:\pgm\test\output\CD&i.&k."; %CD_LAYOUT(&i , &input ,&output); %IF &year <= 2003 %THEN DATA &output; INFILE &input lrecl=42 missover; INPUT FEE_YM $1-6 APPL_TYPE $7 HOSP_ID $8-41 RUN; %ELSE %CD2004_9999(&input, &output); &output; %END; %END; ; RUN; %MEND; 把程式改成下面這個就會過了 %MACRO CD_MERGE; %DO i=1996 %TO 1996; %DO j =1 %TO 2; %IF &j < 10 %THEN %LET k = 0&j; %ELSE %LET k = &j; %CD_LAYOUT(&i,"G:\pgm\test\data\CD&i.&k..DAT" ,"G:\pgm\test\output\CD&i.&k."); %END; %END; ; RUN; Data a.CD_ALL; SET %DO i=1996 %TO 1996; %DO j =1 %TO 2; %IF &j < 10 %THEN %LET k = 0&j; %ELSE %LET k = &j; %LET tmp = "G:\pgm\test\output\CD&i.&k."; &tmp %END; %END; ; RUN; %MEND; ※ 編輯: Maninck 來自: 118.168.90.5 (08/03 07:57)
24F:推 imaltar:你的門診檔是切1~12個月 所以你現在把這12個月和一起是吧 08/03 08:41
25F:→ Maninck:我是要做合併的動作,但不限是什麼檔,我想切模組主要的用 08/03 13:12
26F:→ Maninck:意就在我希望是任何檔都適用,因為他就是一個合併檔案的功 08/03 13:13
27F:→ Maninck:能,不管他是幾個,反正就是要合併檔案 08/03 13:13







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP