楼主: 青青云游
2011 5

请教怎么用sas挑comparables?很急! [推广有奖]

  • 0关注
  • 0粉丝

本科生

22%

还不是VIP/贵宾

-

威望
0
论坛币
3137 个
通用积分
0.0623
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
875 点
帖子
68
精华
0
在线时间
55 小时
注册时间
2005-10-7
最后登录
2015-6-13

楼主
青青云游 发表于 2009-6-17 00:48:10 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大虾们帮帮忙啊。
有两个spreadsheet, 第一个里面是样本, 第二个里面是comparables.
比如:
sheet 1
姓名 班级 体重 出生年份
小明 一班 100   1990
小红 二班 120   1989
小强 一班  180   1990


sheet 2
姓名 班级 体重 出生年份
小刚 一班 200   1990
小一 一班 190    1990
小二 一班 120   1990
小三 二班  110   1990
小四 一班 110    1990
小五 二班 130   1989

根据sheet 1从sheet 2里面挑样本,挑出同班、同年出生且同重量级(+/-20)的同学,比如输出结果如下:
姓名 班级 体重 出生年份
小明 一班 100   1990
小二 一班 120   1990
小四 一班 110    1990

小红 二班 120   1989
小五 二班 130   1989

小强 一班  180   1990
小刚 一班 200   1990
小一 一班 190    1990

跪求帮助!!!!!
二维码

扫码加我 拉你入群

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

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

关键词:comparables Comparable arable comp ABLE SAS comparables

回帖推荐

jingju11 发表于3楼  查看完整内容

2# llulla very good point, data sheet1; input name $ class weight year; datalines; a1 1 100 1990 b1 2 120 1989 c1 1 180 1990 d1 1 80 1990 ; data sheet2; input name $ class weight year; datalines; a2 1 200 1990 b2 1 190 1990 c2 1 120 1990 d2 2 110 1990 e2 1 110 1990 f2 2 130 1989 ; run; proc sql; create table int as select s1.class ,s1.year ,s1.nam ...

本帖被以下文库推荐

Enjoy everyday!

沙发
llulla 发表于 2009-6-17 05:16:55
将第一个数据集的体重重新命名(RENAME)X1, 第二个数据集的体重重新命名为X2. 将两个数据集按同班和同出生年月连接(用MERGE指令), 删除X1和X2大于20的即可. 或只保留X1和X2差值小于20的即可.

藤椅
jingju11 发表于 2009-6-17 06:31:21
2# llulla

very good point,

data sheet1;
input name $ class weight year;
datalines;
a1 1 100 1990
b1 2 120 1989
c1 1 180 1990
d1 1 80 1990
;
data sheet2;
input name $ class weight year;
datalines;
a2 1 200 1990
b2 1 190 1990
c2 1 120 1990
d2 2 110 1990
e2 1 110 1990
f2 2 130 1989
;
run;
proc sql;
create table int as
  select s1.class
        ,s1.year
        ,s1.name
as name1
        ,s2.name
as name2
        ,s1.weight
as weight1
        ,s2.weight
as weight2
  from sheet1 s1
        left join
       sheet2 s2
        on s1.year=s2.year
         & s1.class=s2.class
         & abs(s1.weight-s2.weight)<=
20
  order by 1
          ,2
          ,3
;
quit;
data int;
length sample 8;
set int;
by class year name1;
if first.name1 then sample+1;
run;
data comp(keep=class year name weight sample);
set int;
array nam{2} name1 name2;
array wei{2} weight1 weight2;
do i=1 to 2;
    name=nam{i};
    weight=wei{i};
    output;
end;
run;
proc sort data=comp nodupkey;by _all_;run;
proc sort data=comp out=comp(where=(^missing(weight)));
by sample class year weight;
run;

*note: sample 3 had no matching students in sheet 2 thus only 1 person inside;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

板凳
青青云游 发表于 2009-6-18 01:10:00
问题已解决,真是太感谢楼上二位啦!!
Enjoy everyday!

报纸
邓贵大 发表于 2009-6-18 03:17:35
  1. data sheet1;
  2. input name $ class weight year;
  3. matchno = _n_;
  4. datalines;
  5. 小明 一班 100   1990
  6. 小红 二班 120   1989
  7. 小强 一班  180   1990
  8. ;
  9. data sheet2;
  10. input name $ class weight year;
  11. n = _n_;
  12. datalines;
  13. 小刚 一班 200   1990
  14. 小一 一班 190    1990
  15. 小二 一班 120   1990
  16. 小三 二班  110   1990
  17. 小四 一班 110    1990
  18. 小五 二班 130   1989
  19. ;

  20. proc sql;
  21. create table xxx as
  22. select name, class, weight, year, matchno, 0 as seqnum from sheet1
  23. union all(
  24. select b.name, b.class, b.weight, b.year, a.matchno, b.n as seqnum from
  25. sheet1 as a inner join sheet2 as b
  26. on a.class=b.class and a.year=b.year and a.weight-20 <= b.weight <= a.weight+20
  27. )
  28. order by matchno, seqnum;
  29. quit;
复制代码
Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

地板
jingju11 发表于 2009-6-19 07:20:54
5# 邓贵大

真是不比不知道啊。

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

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