全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3607 8
2019-04-09
程序如下:data test;
                       drfyyc=.;
               run;
               data test;
                      set test;
                      if drfyyc=.;
                      xiangmu="空缺值";
                      wenti="治疗期(访视2),导入期服药依从性判定,是否达到80%-120%空缺,请补充。";
                      huida="";
               run;
报错如下:
8962  data test;
8963      set test;
8964      if drfyyc=.;
8965      xiangmu="空缺值";
8966      wenti="治疗期(访视2),导入期服药依从性判定,是否达到80%-120%空缺,请补充。";
ERROR: 值“空缺,请补充。”是无效的 SAS 名。
WARNING: 没有解析宏 空缺,请补充。 的调用。

8967      huida="";
8968  run;

NOTE: 从数据集 WORK.TEST. 读取了 1 个观测
NOTE: 数据集 WORK.TEST 有 1 个观测和 4 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.01 秒

是不是因为%的原因?在80%-120%之间加上两个双引号没有报错。就是想知道上面程序错误的具体原因,多谢各位大神

二维码

扫码加我 拉你入群

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

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

全部回复
2019-4-9 12:49:22
wenti="治疗期(访视2),导入期服药依从性判定,是否达到80%-120%空缺,请补充。";这里改成单引号就好了
wenti=‘治疗期(访视2),导入期服药依从性判定,是否达到80%-120%空缺,请补充。’;
二维码

扫码加我 拉你入群

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

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

2019-4-9 13:51:08
SAS中会把在双引号("")中的百分号(%)当作宏来解析
二维码

扫码加我 拉你入群

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

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

2019-4-9 14:31:34
gudingji 发表于 2019-4-9 12:49
wenti="治疗期(访视2),导入期服药依从性判定,是否达到80%-120%空缺,请补充。";这里改成单引号就好了
...
谢谢,上面的这个问题我知道了。大神能帮我看看下面这个如何修改:
data a263;
      fyyc=0.7;
run;
data a264;
      fyyc=0.9;
run;


%macro gy(an,nr,nr1,nr2,bn);
    data &an.;
             set &an.;
                 xiangmu="逻辑核查";
                 wenti="由导入期(访视1)的本次试验药物发放数量和治疗期(访视2)的回收数量计算所得的导入期服药依从性为&nr.,&nr1.,治疗期(访视2)的导入期服药依从性判定的是否达到"||%nrstr("80%-120%")||"勾选&nr2.,请核实。";
                 huida="";
        run;
        proc sql;
             create table &bn. as
                 select siteid,sszxmsx,xiangmu,wenti,huida from &an.;
        quit;
%mend gy;
%gy(a263,fyyc,不在80%-120%范围内,是,b263)
%gy(a264,fyyc,在80%-120%范围内,否,b264)
二维码

扫码加我 拉你入群

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

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

2019-4-9 14:32:19
许雪1121 发表于 2019-4-9 13:51
SAS中会把在双引号("")中的百分号(%)当作宏来解析
上面知道了,下面的这个如何修改才能正确,多谢啦:
data a263;
      fyyc=0.7;
run;
data a264;
      fyyc=0.9;
run;


%macro gy(an,nr,nr1,nr2,bn);
    data &an.;
             set &an.;
                 xiangmu="逻辑核查";
                 wenti="由导入期(访视1)的本次试验药物发放数量和治疗期(访视2)的回收数量计算所得的导入期服药依从性为&nr.,&nr1.,治疗期(访视2)的导入期服药依从性判定的是否达到"||%nrstr("80%-120%")||"勾选&nr2.,请核实。";
                 huida="";
        run;
        proc sql;
             create table &bn. as
                 select siteid,sszxmsx,xiangmu,wenti,huida from &an.;
        quit;
%mend gy;
%gy(a263,fyyc,不在80%-120%范围内,是,b263)
%gy(a264,fyyc,在80%-120%范围内,否,b264)
二维码

扫码加我 拉你入群

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

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

2019-4-10 17:20:10
jpj根号2 发表于 2019-4-9 14:32
上面知道了,下面的这个如何修改才能正确,多谢啦:
data a263;
      fyyc=0.7;
看看这样符不符合你要的:
%macro gy(an,nr,nr1,nr2,bn);
data &an.;
        length wenti $300.;
    set &an.;
    xiangmu="逻辑核查";
    wenti="由导入期(访视1)的本次试验药物发放数量和治疗期(访视2)的回收数量计算所得的导入期服药依从性为&nr.,&nr1.,
治疗期(访视2)的导入期服药依从性判定的是否达到80%-120%,勾选&nr2.,请核实。";
    huida="";
run;
         proc sql;
              create table &bn. as
                  select siteid,sszxmsx,xiangmu,wenti,huida from &an.;
         quit;
%mend gy;
%gy(a263,fyyc,%nrstr(不在80%-120%范围内),是,b263)
%gy(a264,fyyc,%nrstr(在80%-120%范围内),否,b264)
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群