楼主: andrea1983
4439 16

[原创博文] 求助大虾 [推广有奖]

  • 1关注
  • 0粉丝

andrea

硕士生

45%

还不是VIP/贵宾

-

威望
0
论坛币
108 个
通用积分
3.5500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
220 点
帖子
122
精华
0
在线时间
108 小时
注册时间
2007-7-10
最后登录
2025-4-18

楼主
andrea1983 发表于 2012-2-13 17:35:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
写了一段宏程序,怎么调试都得不到结果,很头大,求助各位大虾。程序如下,当N=1时,sum_drugs_&y.M_sum_drugs_&x.M就变成sum_drugs_6M_sum_drugs_3M,这个变量数据库自带并且是数值型。但是每次运行的时候,就说 A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:      sum_drugs_6M_sum_drugs_3M。也就是说sum_drugs_6M_sum_drugs_3M不是数值型!!不知道怎么回事啊~~

%macro drugpoint(N=);
%do i=&N %to 7;
    %let x=%eval(&N*3);
    %let y=%eval((&N+1)*3);
    %let drugs_ab=%eval(sum_drugs_&y.M_sum_drugs_&x.M);
   %if &drugs_ab=1 or &drugs_ab=-1  %then %do;
    %if B_B_&x.M_c ~= B_B_&y.M_c %then IOP_B_B=IOP_&y.M-IOP_&x.M;
%else %if  PGA_&x.M_c ~= PGA_&y.M_c %then IOP_PGA=IOP_&y.M-IOP_&x.M;
%else %if  Miotic_&x.M_c ~= Miotic_&y.M_c %then IOP_Miotic=IOP_&y.M-IOP_&x.M;
%else %if  CAI_&x.M_c ~= CAI_&y.M_c %then IOP_CAI=IOP_&y.M-IOP_&x.M;
%else %if  Diamox_&x.M_c ~= Diamox_&y.M_c %then IOP_Diamox=IOP_&y.M-IOP_&x.M;
%else %if  Adren_&x.M_c ~= Adren_&y.M_c %then IOP_Adren=IOP_&y.M-IOP_&x.M;
   %end;
%end;
%mend  drugpoint;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:condition Character required function numeric

沙发
zhangzachary 发表于 2012-2-13 17:51:05
问题在于drugs_ab是神马……你在%let drugs_ab之后写一行%put &drugs_ab看看~~
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

藤椅
andrea1983 发表于 2012-2-13 18:03:19
zhangzachary 发表于 2012-2-13 17:51
问题在于drugs_ab是神马……你在%let drugs_ab之后写一行%put &drugs_ab看看~~
多谢提醒!试过了,不行,还是同样的系统错误 A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: sum_drugs_6M_sum_drugs_3M。根据sas系统提醒,貌似是认错变量类型啊~~

板凳
zhangzachary 发表于 2012-2-13 18:15:56
andrea1983 发表于 2012-2-13 18:03
多谢提醒!试过了,不行,还是同样的系统错误 A character operand was found in the %EVAL function or  ...
查看%eval 的用法
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

报纸
include999 发表于 2012-2-13 22:22:48
sum_drugs_&y.M_sum_drugs_&x.M是数据表中的一个变量,不能直接复制给宏变量,可以通过sql语句或data步将其值赋给宏变量drugs_ab
已有 1 人评分论坛币 热心指数 收起 理由
eijuhz + 50 + 1 热心帮助其他会员

总评分: 论坛币 + 50  热心指数 + 1   查看全部评分

地板
jinlin2009 发表于 2012-2-13 23:57:03
有可能是你宏变量的赋值有问题。你试一下 %let drugs_ab=&&sum_drugs_&y.M_sum_drugs_&x.M;

7
andrea1983 发表于 2012-2-14 10:15:39
include999 发表于 2012-2-13 22:22
sum_drugs_&y.M_sum_drugs_&x.M是数据表中的一个变量,不能直接复制给宏变量,可以通过sql语句或data步将其 ...
主要目的是比較sum_drugs_&y.M_sum_drugs_&x.M=1 or sum_drugs_&y.M_sum_drugs_&x.M=-1,直接写报错,说要用eval,用了也报错。用sql或data以后怎么可以把循环语句和所有变量联系在一起?

8
zhangzachary 发表于 2012-2-14 10:26:23
andrea1983 发表于 2012-2-14 10:15
主要目的是比較sum_drugs_&y.M_sum_drugs_&x.M=1 or sum_drugs_&y.M_sum_drugs_&x.M=-1,直接写报错,说要 ...
不应该用eval。你需要比较的是那些变量名下的观测值吧?宏里都没有读取data,怎么比……如果是嵌在data step里的,好像也不应该这么写……
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

9
andrea1983 发表于 2012-2-14 10:29:48
zhangzachary 发表于 2012-2-14 10:26
不应该用eval。你需要比较的是那些变量名下的观测值吧?宏里都没有读取data,怎么比……如果是嵌在data s ...
就是这样的,想比较变量里面的数值,直接写%if sum_drugs_&y.M_sum_drugs_&x.M=1 or sum_drugs_&y.M_sum_drugs_&x.M=-1  %then %do;报错。A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: sum_drugs_6M_sum_drugs_3M。不知道怎么弄才好

10
zhangzachary 发表于 2012-2-14 10:32:57
andrea1983 发表于 2012-2-14 10:29
就是这样的,想比较变量里面的数值,直接写%if sum_drugs_&y.M_sum_drugs_&x.M=1 or sum_drugs_&y.M_sum_ ...
你没有data step,SAS不知道这个是变量名,只是一个简单的文本内容,而且不能用eval对文本做操作。你稍等下,我按大概理解你的意思写一个宏让你操作一下看看
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 06:54