楼主: playmore
2781 16

请问一个整理数据的代码如何进行简化 [推广有奖]

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16320 个
通用积分
8.1597
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1331 小时
注册时间
2007-1-11
最后登录
2023-12-15

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我现在有两个表,这两个表有相同的变量,现在我想把这两个表纵向连接在一起,并且要穿插的连接,即新表的第1、3、5...行是过去的表1,第2、4、6...行是过去的表2。

我现在的解决方法是先在两个表加个N,表1的N变量依次是1、3、5...,表2的N变量依次是2、4、6...,然后合并,排序,删掉N。觉得有点繁琐,不知道有简单的办法没有。

即使没有,也可以帮我简化下我后面的合并、排序和删掉N的代码,如下所示:

data FCA_Code;
set FCA_Code_temp1 FCA_Code_temp2;
run;
proc sort data=FCA_Code;
by N;
run;
data FCA_Code;
set FCA_Code;
drop N;
run;


我原本想用sql中的insert into把两个表合一个表,然后在一个proc sql中加上order by,结果无法运行。请大牛支招儿吧,谢谢!

二维码

扫码加我 拉你入群

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

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

关键词:整理数据 proc sql insert Order code 如何

本帖被以下文库推荐

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛
沙发
275769263 发表于 2011-10-28 23:29:47 |只看作者 |坛友微信交流群
如果两个数据集的观测数一样大的话可以实现,如果不一样的话,稍加修改也可以实现。
data a;
i=1;output;
i=3;output;
i=5;output;
run;

data b;
i=2;output;
i=4;output;
i=6;output;
run;

data c;
if 1=0 then set a nobs=n1;
do j=1 to n1;
set a point=j;
output;
set b point=j;
output;
end;
stop;
run;
求工作..求工作..求工作..求工作...

使用道具

藤椅
jingju11 发表于 2011-10-29 00:18:40 |只看作者 |坛友微信交流群
set + sort 应该可以了,无须额外增加标示:京剧
  1. data have;
  2.    if 0  then set t1 nobs =n1;
  3.    set t1(in =a) t2;
  4.    n =_n_-n1 *(^a);
  5. proc sort out =have(drop =n); by n;
  6. run;
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
zhentao + 5 + 5 + 5 太聪明了:if 0
playmore + 1 + 1 这个方法太经典了!

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

使用道具

板凳
bobguy 发表于 2011-10-29 10:51:59 |只看作者 |坛友微信交流群
If your data sets is already sorted by i, then a interleaving using set with by is a easy solution.

data t1;
   do i=1 to 10;
     a='table1';
         output;
        end;
run;

data t2;
   do i=1 to 10;
     a='table2';
         output;
        end;
run;

data t3;
   set t1 t2;
   by i ;
run;

proc print;run;

使用道具

报纸
遇女心惊 发表于 2011-10-29 23:36:40 |只看作者 |坛友微信交流群
  1. data FCA_Code_temp1;
  2.         set FCA_Code_temp1;
  3.         order=_n_;
  4. run;

  5. data FCA_Code_temp2;
  6.         set FCA_Code_temp2;
  7.         order=_n_;
  8. run;

  9. data FCA_Code;
  10.         set FCA_Code_temp1 FCA_Code_temp2;
  11.         by order;
  12. run;
复制代码

使用道具

地板
numman 发表于 2011-10-30 01:57:41 |只看作者 |坛友微信交流群
楼上的方法都不错啊。。相比较还是京剧的代码简洁些啊  不过逻辑别扭些。。

使用道具

7
playmore 发表于 2011-10-31 09:57:49 |只看作者 |坛友微信交流群
jingju11 发表于 2011-10-29 00:18
set + sort 应该可以了,无须额外增加标示:京剧
刚刚看到你的例子时,基本看不懂什么意思
在网上查了下,if 0 then后的语句是永不执行,但是在编译时把n1赋值为t1的观测值数量?
然后^a代表非a,也就是不在t1的观测?
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

8
jingju11 发表于 2011-11-1 08:43:40 |只看作者 |坛友微信交流群
就是。就是。京剧

使用道具

9
jingju11 发表于 2011-11-1 08:44:42 |只看作者 |坛友微信交流群
275769263 发表于 2011-10-28 23:29
如果两个数据集的观测数一样大的话可以实现,如果不一样的话,稍加修改也可以实现。
data a;
i=1;output; ...
如何稍加改动即可呢?京剧

使用道具

10
soporaeternus 发表于 2011-11-1 08:56:09 |只看作者 |坛友微信交流群
  1. data z;
  2.         if 0 then set x nobs=n;
  3.         set x y;
  4.         i=ifn(_n_<=n,2*_n_-1,2*(_n_-n));
  5. run;
  6. proc sort data=z out=z(drop=i);by i;run;quit;
复制代码
看样子是我想得太复杂了......
Let them be hard, but never unjust

使用道具

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

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

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

GMT+8, 2024-10-5 23:27