楼主: 眼睛花
5278 14

[原创博文] 求观测作求和和判断的语句 [推广有奖]

11
眼睛花 发表于 2011-5-10 22:13:35
9# sas_user
哥,能讲下你的设计思路不?
测试过程序可以运行。
但是当条件改为where a.spending+b.spending=200(或者更大的时候);
这个程序运行不出结果的,我大胆推测这SQL语句只对相加的两条观测满足100的进行处理?

12
眼睛花 发表于 2011-5-10 22:16:51
10# wb8686
你的这个程序中的d是那里来的?
a我理解为读入的数据,没错吧

13
sas_user 发表于 2011-5-10 22:56:03
11# 眼睛花

谢谢回复。
sql先产生一个cartesian结果。就是列出组合中每一种可能,然后再选择符合条件的输出。可以用于选择等于或大于200或任何数。 sql把两组一样的数据做同样的检索所以每个组合都出现两遍。下面的data step就是排除重复选择的记录。 希望解释清楚了。

14
wb8686 发表于 2011-5-16 13:36:53
data a;
input code spending;
datalines;
1111 38
2222 40
3333 27
4444 55
5555 60
6666 70
7777 80
8888 90
9999 10
1122 11
1133 12
1144 13
1155 14
1166 15
1177 16
2277 16.3
2288 17.4
3399  29.8
;
run;
data b;
set a nobs=obs;
do i=1 to obs;
set a (rename=(Code=Code1 spending=spending1)) point=i;
if spending+spending1=100 then output;
end;
run;
思路:先读入a(set a),每读入一条,接下来,用一个do 循环,从第一条 一直到最后一条的找(point=i),和第一条匹配(加起来等于100),如果能匹配上,就把这两天输出;
同样道理,sas 再读书第二条,接着再从do 循环里 找匹配的

15
shenliang_111 发表于 2011-8-24 13:00:56
try this:
proc sql;
create table result as
select a.code,a.spending,b.code as bcode, b.spending as bspending  from
new a inner join new b
on (a.spending+b.spending=100);
quit;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 19:41