楼主: crackman
2692 6

如何把一条记录变成6条记录 [推广有奖]

已卖:401份资源

院士

83%

还不是VIP/贵宾

-

威望
6
论坛币
91928 个
通用积分
23.5045
学术水平
424 点
热心指数
505 点
信用等级
256 点
经验
112978 点
帖子
2940
精华
0
在线时间
2532 小时
注册时间
2007-4-26
最后登录
2025-6-25

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

楼主
crackman 发表于 2009-9-9 16:20:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在的数据表是这样的:
ID ADRESS CHECKER   DATE   SEX01  SEX02 SEX03 OCCUP1    OCCUP02    OCCUP03 OLD01 OLD02 OLD03
1  PKU        CRACKMAN  090909 F         M       M        STUDENT        STUDENT   STUDENT              23       22      24
2  PKU        CRACKMAN  090909 F         M       F        STUDENT        STUDENT   STUDENT               22      21      22
3  PKU        CRACKMAN  090909 M        F        M        STUDENT       STUDENT   STUDENT                19     19     23
4  PKU        CRACKMAN  090909 M        F       M        STUDENT         STUDENT   STUDENT              24       24    21

现在想变成如下这个表:

ID       ADRESS CHECKER   DATE      SEX      OCCUP    LOD
101     PKU  CRACKMAN      090909    F             STUDENT 23
102   PKU   CRACKMAN      090909     M                STUDENT 22
........
就是把第一个表的一条记录变成下面的三条记录
谢谢!!!!
二维码

扫码加我 拉你入群

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

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

关键词:crackman Student Ackman CRACK Dress 记录

回帖推荐

maidenhan 发表于7楼  查看完整内容

Here is my macro way.

sushe1527 发表于4楼  查看完整内容

data a; input ID ADRESS$ CHECKER$ DATE:yymmdd10. SEX01$ SEX02$ SEX03$ OCCUP01$ OCCUP02 $ OCCUP03$ OLD01 OLD02 OLD03@@; format date yymmdd10.; cards; 1 PKU CRACKMAN 090909 F M M STUDENT STUDENT STUDENT 23 22 24 2 PKU CRACKMAN 090909 F M F STUDENT STUDENT STUDENT 22 ...

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

1# crackman *note:address mistakenly spelled as adress;

坐看云起时 发表于2楼  查看完整内容

应该符合你的要求了 data a; input ID ADRESS $ CHECKER $ DATE:ddmmyy. SEX01$ SEX02$ SEX03$ OCCUP01$ OCCUP02$ OCCUP03$ OLD01 OLD02 OLD03; format date ddmmyy6.; datalines; 1 PKU CRACKMAN 090909 F M M STUDENT STUDENT STUDENT 23 22 24 2 PKU CRACKMAN 090909 F M F STUDENT STUDENT STUDENT 22 21 22 3 PKU CRACKMAN 090909 M ...

本帖被以下文库推荐

沙发
坐看云起时 在职认证  发表于 2009-9-9 17:38:22
应该符合你的要求了
data a;
input ID ADRESS $ CHECKER $  DATE:ddmmyy.  SEX01$  SEX02$ SEX03$  OCCUP01$  OCCUP02$  OCCUP03$  OLD01 OLD02 OLD03;
format date ddmmyy6.;
datalines;
1  PKU    CRACKMAN  090909  F       M      M     STUDENT    STUDENT   STUDENT  23    22    24
2  PKU    CRACKMAN  090909  F       M      F     STUDENT    STUDENT   STUDENT  22    21    22
3  PKU    CRACKMAN  090909  M       F      M     STUDENT    STUDENT   STUDENT  19    19    23
4  PKU    CRACKMAN  090909  M       F      M     STUDENT    STUDENT   STUDENT  24    24    21
;
run;

data b;
set work.a;
keep ID ADRESS  CHECKER   DATE  SEX ;
array ta {*} $ SEX01  SEX02 SEX03;
do ti = 1 to dim(ta);                                                                                                        
     SEX = ta{ti};
output;                                                                                                                           
end;
run;         
data c;
set work.a;
keep  OCCUP;
array tb {*} $ OCCUP01  OCCUP02  OCCUP03;
do ti = 1 to dim(tb);                                                                                                        
     OCCUP = tb{ti};
output;
end;
run;
data d;
set work.a;
keep  OLD;
array tc {*} OLD01 OLD02 OLD03;
do ti = 1 to dim(tc);                                                                                                        
     OLD = tc{ti};
output;
end;
run;

data abc;
merge b c d;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

藤椅
jingju11 发表于 2009-9-9 20:51:27
1# crackman
  1. *using the above dataset a;
  2. data b (keep=id_ adress date sex occup old rename=(id_=id));
  3. set a;
  4. array sex_  SEX01  SEX02 SEX03;
  5. array occ_  OCCUP01  OCCUP02  OCCUP03;
  6. array old_   OLD01 OLD02 OLD03;
  7. n=0;
  8. do over sex_;
  9.   n+1;
  10.   id_ = id*100+n;
  11.   sex = sex_;
  12.   occup = occ_;
  13.   old = old_;  
  14.   output;
  15. end;  
  16. run;
复制代码
*note:address mistakenly spelled as adress;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

板凳
sushe1527 发表于 2009-9-9 22:25:42
data a;
input
ID ADRESS$ CHECKER$   DATE:yymmdd10.   SEX01$  SEX02$ SEX03$ OCCUP01$    OCCUP02 $   OCCUP03$  OLD01 OLD02 OLD03@@;
format date yymmdd10.;
cards;
1  PKU        CRACKMAN  090909 F         M       M        STUDENT        STUDENT   STUDENT              23       22      24
2  PKU        CRACKMAN  090909 F         M       F        STUDENT        STUDENT   STUDENT               22      21      22
3  PKU        CRACKMAN  090909 M        F        M        STUDENT       STUDENT   STUDENT                19     19     23
4  PKU        CRACKMAN  090909 M        F       M        STUDENT         STUDENT   STUDENT              24       24    21
;run;
%let num=3;%macro x;%do i=1 %to #proc sql;create table a&i as select id*100+&i as id,adress,
checker,date,sex0&i as sex,occup0&i as occup,old0&i as old from a ;quit;%end;%mend;%x;
%macro y;data final; set %do i=1 %to #a&i %end; ;run;proc sort;by id;run;%mend;%y;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

报纸
losttemple 发表于 2009-9-9 22:33:09
馊主意
output 3次再set

地板
chaoren2010 发表于 2012-4-18 17:50:04

7
maidenhan 发表于 2012-4-18 20:49:13
Here is my macro way.

  1. data a;
  2. input ID ADRESS $ CHECKER $  DATE:ddmmyy.  SEX01$  SEX02$ SEX03$  OCCUP01$  OCCUP02$  OCCUP03$  OLD01 OLD02 OLD03;
  3. format date ddmmyy6.;
  4. datalines;
  5. 1  PKU    CRACKMAN  090909  F       M      M     STUDENT    STUDENT   STUDENT  23    22    24
  6. 2  PKU    CRACKMAN  090909  F       M      F     STUDENT    STUDENT   STUDENT  22    21    22
  7. 3  PKU    CRACKMAN  090909  M       F      M     STUDENT    STUDENT   STUDENT  19    19    23
  8. 4  PKU    CRACKMAN  090909  M       F      M     STUDENT    STUDENT   STUDENT  24    24    21
  9. ;
  10. run;
  11. %macro test(n);
  12. data b;
  13.         set %do ii = 1 %to &n.;
  14.                       a(keep = ID ADRESS CHECKER DATE SEX0&ii. OCCUP0&ii. OLD0&ii.
  15.                          rename=(SEX0&ii. = SEX OCCUP0&ii. = OCCUP OLD0&ii. = OLD))
  16.               %end;;
  17. run;
  18. %mend;
  19. %test(n = 3);
复制代码

已有 2 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子
crackman + 60 鼓励积极发帖讨论

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

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

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