楼主: 小鳄鱼a
2613 2

有关宏变量赋值的一个问题 [推广有奖]

  • 6关注
  • 10粉丝

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

50论坛币
只执行       

                proc sql noprint;

                select n into :loci from pstkitest

                having abs(dif)=min(abs(dif)) ;

                quit;

时候,loci取值比如是811

但执行
                proc sql noprint;
                select n into :loci from pstkitest
                having abs(dif)=min(abs(dif)) and dif<11;
                quit;

实际上并没有同时符合   having abs(dif)=min(abs(dif)) and dif<11;  的观测,  但此时loci仍然是811,并且出现了提示
996           proc sql noprint;
997           select n into :loci from pstkitest
998           having abs(dif)=min(abs(dif)) and dif<11;
NOTE: 查询要求将汇总统计量与原始的数据重新合并。

999           quit;


请问怎样才能将此时的loci取空值或者不取值之类的。
另外,空值是否与常数进行大小比较,如果可以,是大于所有常数还是小于所有常数。如何生成不能够比较的赋值。


最佳答案

prince315 查看完整内容

空值是可以跟数值比较大小的,且空值被认为是最小的数。 你这边的条件,可能这么写有问题吧?是不是把条件改成 proc sql noprint; select n into :loci from pstkitest where dif
关键词:宏变量赋值 proc sql Select having Elect
沙发
prince315 在职认证  发表于 2016-10-25 15:03:20 |只看作者 |坛友微信交流群
空值是可以跟数值比较大小的,且空值被认为是最小的数。
你这边的条件,可能这么写有问题吧?是不是把条件改成
proc sql noprint;
select n into :loci from pstkitest
where dif<11
having abs(dif)=min(abs(dif));
quit;
就可以了?

使用道具

藤椅
bluehaiku 发表于 2016-10-27 13:38:54 |只看作者 |坛友微信交流群
1:空值是可以与数值或者字符比较的,空值算是最小的。
2:当having 子句筛选不出来观测时,就没有选定的行。no rows。
3:如果想让loci去空值,建议使用data步中的if语句,而且,不过在数据集中,你要构建一个新变量来代表最小值(min(abs(dif)) 。在data不中使用call symput函数
4:因为最后使用的Proc sql过程没有选中观测,所以宏变量loci的值仍然是上一次的
绝对字符和数值是不能比较的吧


就这么多了吧
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 5 + 5 + 5 精彩帖子

总评分: 论坛币 + 5  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 18:35