全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5580 13
2015-11-04

SAS中读取数据时,原始数据格式如下:











ASN=2,3;CEU=2;CHB=4,5,6;CHS=6,7


ASN=3;CEU=2,3;AFR=2,3;CHB=4,5;CHS=7,8


ASN=2,CEU=2,5;JPN=4,5,6;AFR=4,5,6;CHB=5,6,7


每一行包含的内容不一样,但是都是以Key=value的形式存储然后以;分割,我现在想提取出每一行CHB=后面的value,perl中好像有相应的方法来处理,但是自己不怎么擅长perl,所以请问各位高手在SAS中有什么好的办法吗?谢谢






二维码

扫码加我 拉你入群

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

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

全部回复
2015-11-4 15:21:31
SAS 有个substr函数,你可以在sql过程中 弄一下试试
二维码

扫码加我 拉你入群

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

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

2015-11-9 10:13:38
yang1015661763 发表于 2015-11-4 15:21
SAS 有个substr函数,你可以在sql过程中 弄一下试试
substr 一般的用法是 substr(variable, position, length), 但是该数据首先的一个问题是,每一行的变量的个数和位置不一样,所以需要
1. 根据Key来定位到自己想要的变量
2. 然后再提取出来该变量后面的value(这个时候或许可以用到substr,但也会有一些问题,比如每个变量的长度不是固定的,没有办法制定substr中的length的大小)。
二维码

扫码加我 拉你入群

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

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

2015-11-10 05:06:18
data a;
infile "H:\test.txt" truncover;
input b $100.;
run;

proc print; run;

data c; set a;
        l1=find(b,'CHB=','i');
        d=substr(b,l1+4);
        l2=findc(d,"ACJ");
        if l2>0 then e=substr(d,1,l2-2);
        else e=d;
run;

二维码

扫码加我 拉你入群

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

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

2015-11-10 06:22:57
试试input with named
二维码

扫码加我 拉你入群

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

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

2015-11-10 13:12:17
lqyrendajinji 发表于 2015-11-10 05:06
data a;
infile "H:\test.txt" truncover;
input b $100.;
很聪明的方法,谢谢!
不过在I2=findc(d,"ACJ");这个命令中ACJ是你根据我提供的三行数据总结出来的三种情况,事实上原始数据有3个G,后面不一定局限于“ACJ”三种情况。
我自己找到一个办法,你可以参考下:
data a;
infile "H:\test.txt" truncover;
input b $100.;
run;

data c; set a;
        chb = scan(scan(tranwrd(b,"CHB=","|"),2,"|"),1,";");
run;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群