楼主: qinly10
2292 8

SAS读取txt跨行数据问题 [推广有奖]

  • 1关注
  • 0粉丝

已卖:1份资源

本科生

92%

还不是VIP/贵宾

-

威望
0
论坛币
361 个
通用积分
4.2000
学术水平
5 点
热心指数
4 点
信用等级
3 点
经验
2327 点
帖子
66
精华
0
在线时间
164 小时
注册时间
2010-12-1
最后登录
2024-12-21

楼主
qinly10 发表于 2013-9-22 18:10:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好,我有txt格式数据,样式如下:
>y1 t1 "abcdefgh"
ATGCT
G
>y2 t2 "abcdefgh123456789"
ATGC
GA
>y3 t3 "abcdefgh45698798798798794565465"
ATGCTT


想把它读到sas里头变成这样:
y1 t1 ATG
y1 t1 CTG
y2 t2 ATG
y2 t2 CGA
y3 t3 ATG
y3 t3 CTT


请大家帮帮忙呀!
二维码

扫码加我 拉你入群

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

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

关键词:txt ABCDEFG txt格式 ABCD def

沙发
yongyitian 发表于 2013-9-22 22:21:52
  1. data test;
  2. input @2 v1 $ v2 $ vt $40. @;
  3. input vt2 $ @;
  4.     v3 = substr(strip(vt2), 1,3);
  5.          output;
  6.     if length(strip(vt2)) > 3 then
  7.         do;
  8.            v3 = substr(strip(vt2), 4,3);
  9.         end;
  10.     if length(strip(vt2)) = 6 then output;
  11.        else do;
  12.          input vt3 $;
  13.          v3 = cats(v3, strip(vt3));
  14.          output;
  15.        end;
  16.   retain v1 v2;
  17.   drop vt vt2 vt3;
  18. datalines;
  19. >y1 t1 "abcdefgh"
  20. ATGCT
  21. G
  22. >y2 t2 "abcdefgh123456789"
  23. ATGC
  24. GA
  25. >y3 t3 "abcdefgh45698798798798794565465"
  26. ATGCTT
  27. ; run;

  28. proc print data=test; title 'test';
  29. run;
复制代码
InputResult.PNG

藤椅
qinly10 发表于 2013-9-23 16:20:40
yongyitian 发表于 2013-9-22 22:21
谢谢你的回答。不过还有些问题,就是如果数据结构成了这样:
>y1 t1 "abcdefgh"
ATGCTT
G
>y2 t2 "abcdefgh123456789"
ATGCG
GA
>y3 t3 "abcdefgh45698798798798794565465"
ATGCTT
运行程序就无法得到正确结果了。还有没有改进的方法呀?

板凳
yongyitian 发表于 2013-9-24 09:12:28
qinly10 发表于 2013-9-23 16:20
谢谢你的回答。不过还有些问题,就是如果数据结构成了这样:
>y1 t1 "abcdefgh"
ATGCTT
数据结构变化太大。 真有点难, 想到的就是多用几个if语句。 等高手出现。
建议生成数据时统一格式。

报纸
qinly10 发表于 2013-9-25 11:57:38
有没有什么语句可以控制住指针,让它在条件x='>'为真的时候,向上一行或是前一列移动一个位置?

地板
qinly10 发表于 2013-9-27 21:41:23
怎么这个帖子除了yongyitian外没人再回答了么?京剧,webgu,pobel,playmore,iamasasor,boe,邓贵大,hopewell,bobguy,maidenhan,zhangzachary??帮帮我吧

7
邓贵大 发表于 2013-9-27 22:17:18
这种问题要抓那些SAS BASE考了90分以上的高手!
Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

8
可~乐 发表于 2013-9-28 16:00:01
  1. data test;
  2. input var&$100.;
  3. cards;
  4. >y1 t1 "abcdefgh"
  5. ATGCT
  6. G
  7. >y2 t2 "abcdefgh123456789"
  8. ATGC
  9. GA
  10. >y3 t3 "abcdefgh45698798798798794565465"
  11. ATGCTT
  12. ;
  13. run;

  14. data want;
  15.         set test;
  16.         length new_var $ 100;
  17.         retain new_var ;
  18.         if index(var,">") then new_var=var;
  19.         else new_var=cats(new_var,var);
  20.         group=substr(new_var,2,2);
  21.         group1=scan(new_var,2);
  22.         var1=scan(new_var,3,'"');
  23. run;

  24. proc sort data=want;
  25.         by group new_var;
  26. run;

  27. data wanted;
  28.         set want(drop=var new_var);
  29.         by group;
  30.         if last.group;
  31.         n=length(var1)/3;
  32.         do i=1 to n;
  33.                 var2=substr(var1,3*i-2,3);
  34.                 output;
  35.         end;
  36.         keep group group1 var2;
  37. run;
复制代码

9
qinly10 发表于 2013-9-28 19:32:20
大家好,谢谢大家的回答。我在sas论坛上也提了这个问题,并且得到了data_null_的回答,解决了我的问题,这里贴出来和大家一起学习一下。

提问:如何将original form转换成wanted form?
original form:
>yal1 t1 awd123456789
GATA
ACC
>yal2 t2 gfs12354687987984565621321654987
TGACAG
GC
>yal3 t3 gfs1235468798798456562132165498789879875468798652135469798987987987985465798798
ATG
TGAG

wanted form:
yal1 t1 GAT
yal1 t1 AAC
yal1 t1 C
yal2 t2 TGA
yal2 t2 CAG
yal2 t2 GC
yal3 t3 ATG
yal3 t3 TGA
yal3 t3 G

data_null_的回答如下:

filename FT15F001 temp;
data dna;
   infile FT15F001 n=2 eof=eof;
   input  @'>' id :$10. name :$10. / x $1. @;
   if x eq '>' then lostcard;
   length dna $3;
   do while(x ne '>');
      dna = catt(dna,x);
      do i = 2 to 3;
         input x $1. @;
         if x eq '>' then do;
            output;
            goto nextid;           
            end;
         dna = catt(dna,x);
         end;
      output;
      dna = ' ';
      input x $1. @;
      end;
nextid: input @1 @@;
   return;
eof: output;
   stop;
   drop i x;
   parmcards;
>yal1 t1 awd123456789
GATA
ACC
>yal4 t4 gfs12354687987984565621321654987
TGACAG
GCG
>yal2 t2 gfs12354687987984565621321654987
TGACAG
GC
>yal3 t3 gfs1235468798798456562132165498789879875468798652135469798987987987985465798798
ATG
TGAG
;;;;
   run;

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

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