楼主: dxystata
6794 9

SAS如何读入这样的txt文件 [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

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

楼主
dxystata 发表于 2014-1-23 02:39:32 |AI写论文
50论坛币
txt文件内容如下:
abc$$$
ccc
dddaaa$$$xyz
ddd
希望得到的数据集为:
abc
$$$
ccc
dddaaa
$$$
xyz

谢谢!

关键词:txt DDAA DDD ABC DAA 如何

本帖被以下文库推荐

沙发
ayzh1987 发表于 2014-1-23 03:56:02
进来看看,我也不知道

藤椅
dengrong1989 发表于 2014-1-23 09:20:43
$表示的字符都一样吗?一样的话还可以做,不一样就不好办了;
建议:可以先读入每一行数据,用find函数查找$字符,substr函数截取字符串,将数据分列
分好列后用数组拉直成向量,删除空值就ok了

板凳
dxystata 发表于 2014-1-23 09:22:19
dengrong1989 发表于 2014-1-23 09:20
$表示的字符都一样吗?一样的话还可以做,不一样就不好办了;
建议:可以先读入每一行数据,用find函数查找 ...
都是$$$三个字符

报纸
dengrong1989 发表于 2014-1-23 09:46:40
dxystata 发表于 2014-1-23 09:22
都是$$$三个字符
那我的方法应该可以做,随便写了一点,你可以参考一下
data a;
input var1 $20.;
datalines;
abc$$$
ccc
dddaaa$$$xyz
ddd
;
run;

data b;
set a;
if find(var1,'$') then do;
var2=substr(var1,1,find(var1,'$')-1);
var3=substr(var1,find(var1,'$'),3);
var4=substr(var1,find(var1,'$')+3,3);
end;
else var2=var1;
drop var1;
run;

data c;
set b;
array v(3) $ var2-var4;
do i=1 to dim(v);
var=v(i);
if var ne "" then output;
end;
keep var;
run;

地板
farmman60 发表于 2014-1-24 01:56:04

  data want(keep=x);
  infile 'c:\temp\temp.txt' ;
  input x $;
  if index(_infile_,'$')^=0 then do;
     length=length(_infile_);
     _length=findc(_infile_,'$','b');
      if length>_length then do;
          x=scan(_infile_,1);
          output;
          x=compress(_infile_,'$','k');
          output;
          x=scan(_infile_,-1);
                  output;
      end;
      else do;
           x=scan(_infile_,1);
          output;
          x=compress(_infile_,'$','k');
          output;
      end;
  end;
  else output;
  run;

7
dengrong1989 发表于 2014-1-24 10:09:16
farmman60 发表于 2014-1-24 01:56
data want(keep=x);
  infile 'c:\temp\temp.txt' ;
  input x $;
学习了,很不错

8
mycpcw 发表于 2014-1-24 12:58:03
看看

9
焉沫殇情 发表于 2014-5-2 19:01:07
分行录入数据      input  后面加上@@    sas读入数据时不会漏掉
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

10
jeozu 发表于 2014-5-3 04:24:42
  1. abc
  2. $cccdddaaa
  3. xyzddd
复制代码
希望得到的数据集为:
  1. abc
  2. cccdddaaa
  3. $
  4. xyz
复制代码
如果数据是以上形式,再假设是txt文档。两个宏自行调整,文本长度根据需要调整。
  1. data _null_;
  2. infile "&intxt" n=4;
  3. file "&outtxt";
  4. input var1 $. / var2 $. @@;
  5. var2=scan(var2,"$",2);
  6. input / var3 $. ;
  7. var3=prxchange("s/ddd$//",-1, trim(var3));
  8. put var1 /var2 /"$"/var3;
  9. run;
复制代码
其实用一个regular expression就可以搞定的。。主要是不知道你的具体数据。。
已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

总评分: 论坛币 + 50   查看全部评分

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

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