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灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP