楼主: dxystata
6253 5

如何根据观测的奇偶数拆分数据集 [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2015-2-1 09:52:40 |AI写论文
20论坛币
data aaa1;
input x$ y$;
cards;
a b
c d
e f
g h
l j
;
run;

data aaa2;
input x$ y$;
cards;
a b
c d
e f
g h
;
run;

根据数据集中观测的个数拆分数据集
如果为观测为奇数如aaa1,则数据集aaa1拆分为
x1 y1 x2 y2
a b g h
c d l j
e f

如果为观测为偶数如aaa2,则数据集aaa2拆分为
x1 y1 x2 y2
a b e f
c d g h


关键词:奇偶数 数据集 cards Input card 奇偶数 如何

沙发
就喜欢马 发表于 2015-2-1 12:44:53
  1. data aa1;
  2. input x $ y $;
  3. cards;
  4. a b
  5. c d
  6. e f
  7. g h
  8. i j
  9. ;
  10. run;
  11. data aa2;
  12. input x $ y $;
  13. cards;
  14. a b
  15. c d
  16. e f
  17. g h
  18. ;
  19. run;
  20. %macro m(data);
  21. data m;
  22. set &data nobs=nobs;
  23. n=nobs;
  24. n2=_n_;
  25. run;
  26. proc sql;
  27. create table m2 as
  28. select x as x1,y as y1
  29. from m
  30. where n2>(n+1)/2;
  31. quit;
  32. data m2;
  33. set m2;
  34. n2=_n_;
  35. run;
  36. data data_&data;
  37. merge m m2;
  38. by n2;
  39. if n2>(n+1)/2 then delete;
  40. keep x y x1 y1;
  41. run;
  42. proc print data=data_&data;
  43. run;
  44. %mend;
  45. %m(aa1);
  46. %m(aa2);
复制代码

已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

总评分: 论坛币 + 50   查看全部评分

藤椅
sushe1527 发表于 2015-2-1 20:52:45
就喜欢马 发表于 2015-2-1 12:44
data m3 改成data _&data 这样的比较好 要不覆盖前面结果了

板凳
就喜欢马 发表于 2015-2-1 21:26:38
sushe1527 发表于 2015-2-1 20:52
data m3 改成data _&data 这样的比较好 要不覆盖前面结果了
是哦,

报纸
mingfeng07 学生认证  发表于 2015-2-1 22:32:23
  1. data aaa1;
  2. set aaa1;
  3. n=_n_;
  4. run;
  5. proc sql;
  6. select count(*) into:num from aaa1;
  7. quit;
  8. data aaa(drop=n);
  9. merge aaa1(where=(n<=int((&num.+1)/2)) rename=(x=x1 y=y1))  aaa1(where=(n>int((&num.+1)/2)) rename=(x=x2 y=y2) );
  10. run;
复制代码
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
李会超 + 20 热心帮助其他会员
就喜欢马 + 5 + 1 + 1 精彩帖子
teqel + 3 + 3 + 3 我很赞同

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

地板
jl60156 发表于 2015-2-2 06:35:09
data _null_;
        if 0 then set aaa1 nobs=nobs;
         cut1=ceil(nobs/2); cut2=cut1+1;
        call execute(cat('data want;
        merge aaa1(rename=(x=x1 y=y1) obs=',cut1,')
        aaa1(rename=(x=x2 y=y2) firstobs=',cut2,');
        run;'));
        stop;
run;
已有 2 人评分论坛币 收起 理由
就喜欢马 + 5 观点有启发
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 15   查看全部评分

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

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