楼主: cybericsson
2736 7

[求助]找出关键字并将其转换成变量 [推广有奖]

  • 0关注
  • 0粉丝

本科生

42%

还不是VIP/贵宾

-

威望
0
论坛币
87 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
770 点
帖子
163
精华
0
在线时间
22 小时
注册时间
2008-10-7
最后登录
2012-2-29

楼主
cybericsson 发表于 2009-6-9 04:54:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一个数据表如下:
comments   category
d1          cat1
d2          cat2
d3          cat1, cat2
d4          cat3
d5          cat1,cat2, cat3
d6          cat 2
d7          cat 1
....
d50       cat 50
.....
.....
我想转换成如下数据表:

comments  cat1  cat2  cat3 .... d50
d1                1      0       0     ....  0
d2                0      1       0     ....  0
d3                1      1       0     ....  0
d4                0      0       1     ....  0
d5                1      1       1     ....  0
d6                0      1       0    ....  0
d7                1      0       0   ....  0
..
d50              0     0        0  .....  1

把0, 1 换成 N, Y  也行。 Category 中的类型在实际中是不规则的。
也就是说:cat1 实际的名称可能是: test_of_input
cat2: 实际的名称可能是: battery issue
一共有50 个类型。
我有类型表可以用来转换。

请高手帮忙。
多谢了

[此贴子已经被作者于2009-6-9 4:55:03编辑过]

二维码

扫码加我 拉你入群

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

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

关键词:关键字 Comments Category comment BATTERY 变量 关键

回帖推荐

林嘉祥 发表于4楼  查看完整内容

抛块砖头,(假设只有50个类别CAT1-CAT50)data cat_index;    retain fmtname 'cat_index' type 'i' hlo 'u';    do label=1 to 50;        start = cats('CAT', label);        output;    end;proc format cntlin=cat_index;data sa;    input comments $ category $40.;    array c ...

456852 发表于2楼  查看完整内容

data sa;input comments $ category $40.;cards;d1          cat1d2          cat2d3          cat1,cat2d4          cat3d5          cat1,cat2,cat3d6      ...

本帖被以下文库推荐

沙发
456852 发表于 2009-6-9 06:05:00
data sa;
input comments $ category $40.;
cards;
d1          cat1
d2          cat2
d3          cat1,cat2
d4          cat3
d5          cat1,cat2,cat3
d6          cat2
d7          cat1
;
option mprint mlogic symbolgen;
%macro s(n);
data r;set sa;
%do i=1 %to &n;
y&i=scan(category,&i,',');
if y&i="cat&i" then cat&i=1;
%end;
array a cat1-cat&n;
do over a;
if a=. then a=0;
end;
run;
%mend;
%s(3);
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

藤椅
jingju11 发表于 2009-6-9 08:06:00
This is a very good question. i feel that the above author had given a good framework.Thanks.

板凳
林嘉祥 发表于 2009-6-9 09:28:00
抛块砖头,(假设只有50个类别CAT1-CAT50)
data cat_index;
    retain fmtname 'cat_index' type 'i' hlo 'u';
    do label=1 to 50;
        start = cats('CAT', label);
        output;
    end;
proc format cntlin=cat_index;
data sa;
    input comments $ category $40.;
    array cat[50];
    call pokelong(repeat(put(0,rb8.), dim(cat)), addrlong(cat[1]), 8*dim(cat));
    do _n_=1 by 1 while (scan(category, _n_, ',') ne '');
        cat[input(left(scan(category, _n_, ',')), cat_index.)] = 1;
    end;
cards;
d1          cat1
d2          cat2
d3          cat1,cat2
d4          cat3
d5          cat1,cat2,cat3
d6          cat2
d7          cat1
d50          cat7, cat21, cat41, cat43, cat47
;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

平生无大志,唯吃饱ZB,喂饱JB耳!

报纸
456852 发表于 2009-6-9 11:06:00
data sa;
input comments $ category $40.;
cards;
d1 ctt,avv
d2 avv
d3 ctt,avv
d4 gdd
d5 ctt,avv,gdd
d6 avv
d7 ctt
;
data x;
input cate $ @@;
cards;
ctt avv gdd
;
option mprint mlogic symbolgen;
%macro s(n);
data _null_;
set x;
call symput(left(compress('cat'||_n_)),trim(cate));
data r;set sa;
%do i=1 %to &n;
y&i=left(trim(scan(category,&i,',')));
%do t=1 %to &n;
if y&i = "&&cat&t" then &&cat&t=1;
%end;
%end;
%do x=1 %to &n;
if &&cat&x=. then  &&cat&x=0;
%end;
drop y1-y&n;
run;
%mend;
%s(3);
我的这个code有个缺点,必须先把所有category的具体值先输入进去,存成变量。
还有n多的循环。。。唉,编程真是痛苦。。

[此贴子已经被作者于2009-6-9 11:12:51编辑过]

地板
林嘉祥 发表于 2009-6-9 12:30:00
*可怜的孩子!;
data sa;
    input comments $ category $40.;
    length cat $ 40;
    do _n_=1 by 1 while(scan(category, _n_, ',') ne '');
        cat = left(scan(category, _n_, ','));
        ind = 1;
        output;
    end;
cards;
d1 ctt,avv
d2 avv
d3 ctt,avv
d4 gdd
d5 ctt,avv,gdd
d6 avv
d7 ctt
;
options missing=0;
proc transpose data=sa out=sa1(drop=_name_);
    by comments;
    var ind;
    id cat;
run;

平生无大志,唯吃饱ZB,喂饱JB耳!

7
456852 发表于 2009-6-9 12:40:00
厉害,居然想到用转置。

8
cybericsson 发表于 2009-6-9 21:24:00
多谢各位高手, 我会仔细的试验这几个方法, 并报告可行性。再次感谢。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-16 22:45