SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1681|回复: 6
打印 上一主题 下一主题

help for a macro

[复制链接]

11

主题

49

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
跳转到指定楼层
楼主
发表于 2014-7-12 07:05:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
data a;
input unid $ x y;
cards;
a 100 10
a 300 15
b 270 9
b 210 7
c 840 20
;
run;
%macro ab;
proc sql;
create table b as
select *,
%if unid='a' %then %do; (x/y)*1.2 as z format=8.2 %end;
%else %if unid='b' %then %do; (x/y)*1.5 as z format=8.2 %end;
%else %if unid='c' %then %do; (x/y)*2 as z format=8.2 %end;
from a;
quit;
%mend;
%ab
the code above is trying to calculate z=x/y with a adjustment(if unid=a then multiple by 1.2; if b then 1.5; if c then 2), but did not work.
so, just wonder anyone can help, thanks a lot!
分享到:  微信微信
收藏收藏
回复

使用道具 举报

2

主题

41

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
沙发
发表于 2014-7-17 08:27:10 | 只看该作者

data a;
input unid $ x y;
cards;
a 100 10
a 300 15
b 270 9
b 210 7
c 840 20
;
run;

PROC SQL;
CREATE TABLE c AS
SELECT *,
CASE
WHEN unid='a' THEN (x/y)*1.2
WHEN unid='b' THEN (x/y)*1.5
WHEN unid='c' THEN (x/y)*2.0
END AS weighted
FROM a;
QUIT;
回复 支持 反对

使用道具 举报

11

主题

49

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
板凳
 楼主| 发表于 2014-7-19 23:03:40 | 只看该作者
谢谢楼上。
我想知道的是为何用macro就出错呢?如何修改?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
地板
发表于 2014-8-27 17:48:47 | 只看该作者
感觉是你IF 语句后面的分号不对吧,SQL用‘;’一般都是语句结束的时候才用
回复 支持 反对

使用道具 举报

11

主题

49

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
5#
 楼主| 发表于 2014-9-6 22:43:34 | 只看该作者
谢谢楼上,哪该如何改?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

16

积分

新手上路

Rank: 1

积分
16
6#
发表于 2014-9-14 13:51:05 | 只看该作者
你这个macro, if- then -else, 基本就是data步的套路吧
回复 支持 反对

使用道具 举报

11

主题

49

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
7#
 楼主| 发表于 2014-9-20 20:33:44 | 只看该作者
是的,就是看上去及其简单,不知道错在哪里。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2024-11-22 14:28 , Processed in 0.120321 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表