楼主: fallleafsean
2996 11

用SAS修改txt文本 [推广有奖]

  • 6关注
  • 1粉丝

硕士生

68%

还不是VIP/贵宾

-

威望
0
论坛币
262 个
通用积分
4.8900
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
2255 点
帖子
76
精华
0
在线时间
254 小时
注册时间
2012-9-3
最后登录
2024-4-17

10论坛币
想用SAS修改txt文档,就是删除txt文档中最后一句话
比如文档结构是这样的:
未命名1.jpg 就想删除最后一行。S3300700 WITH S3304930;
用SAS应该怎么搞?或者有没有DOS命令可以用的?先谢过了~

最佳答案

pobel 查看完整内容

data test; infile "e:\test.txt" end=last; input ; if not last then do; x=_infile_; output; end; run; data _null_; set test; file "e:\test.txt"; put x; run;
关键词:txt With SOSO 有没有 sos

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 2013-1-7 21:06:57 |只看作者 |坛友微信交流群
data test;
  infile "e:\test.txt" end=last;
  input ;
  if not last then do;
       x=_infile_;
           output;
        end;
run;

data _null_;
   set test;
   file "e:\test.txt";
   put x;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
fallleafsean + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

使用道具

藤椅
sun999bd 发表于 2013-1-7 21:35:53 |只看作者 |坛友微信交流群
didn't work for me!

使用道具

板凳
fallleafsean 发表于 2013-1-8 10:12:20 |只看作者 |坛友微信交流群
pobel 发表于 2013-1-7 21:21
data test;
  infile "e:\test.txt" end=last;
  input ;
可以用~灰常强大~但是如果最后行是空行的话,程序就只删除空行,我想连空行加最后有字符的一样全部删去,我就改了下程序
  data test;
  infile "C:\test.txt";
  input ;
       x=_infile_;
       if missing(x)=0 then    output;     
run;

data _null_;
   set test end= last;
if not last then  do;
file "C:\test.txt";
put x;
end;
run;
可以实现,不过略显繁琐,请问是不是有更简便的方法,比如直接在infile中添加某个选项什么的就能自动排除非空行的最后一行。
还有个问题,x=_infile_是不是等于就是把buffer中所有的东西赋值给x,不是很清楚_infile_的用法
谢谢

使用道具

报纸
pobel 在职认证  发表于 2013-1-8 10:53:20 |只看作者 |坛友微信交流群
fallleafsean 发表于 2013-1-8 10:12
可以用~灰常强大~但是如果最后行是空行的话,程序就只删除空行,我想连空行加最后有字符的一样全部删去, ...
_infile_的值应该是input语句执行后当前那一行记录。

如果是input #1 var1  #2 var2 #3 var3;
那这句执行完后,_infile_的值应该是var3所在的那行记录。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
fallleafsean + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

使用道具

地板
fallleafsean 发表于 2013-1-8 12:11:23 |只看作者 |坛友微信交流群
非常感谢~!

使用道具

7
fallleafsean 发表于 2013-1-8 21:27:36 |只看作者 |坛友微信交流群
pobel 发表于 2013-1-8 10:53
_infile_的值应该是input语句执行后当前那一行记录。

如果是input #1 var1  #2 var2 #3 var3;
想再问下~关于一段程序的,
%macro checknobs(dsn);
data _null_;
if nobs=0 then do;
file print notitles;
put "there are no observations in &dsn";
end;
set &dsn nobs=nobs;
run;
%mend checknobs;
----------------------------------------------------------------
%macro checknobs(dsn);
data _null_;
set &dsn nobs=nobs;
if nobs=0 then do;
file print notitles;
put "there are no observations in &dsn";
end;

run;
%mend checknobs;

者是数据集是否为空集的判断,同样的两段程序,仅仅把set语句的位置变换一下,下面那段就无法运行,请问这是怎么回事呢~

使用道具

8
pobel 在职认证  发表于 2013-1-9 08:27:52 |只看作者 |坛友微信交流群
fallleafsean 发表于 2013-1-8 21:27
想再问下~关于一段程序的,
%macro checknobs(dsn);
data _null_;
这个问题涉及到数据步的“编译”和“执行”。

1. NOBS= 这个选项是SAS在数据步编译过程就能看到,并且得到所set的数据集有多少条记录。因此到了数据步的执行阶段,关于nobs的语句可以在set语句之前执行。所以上面那段程序是可以执行的。

2. 下面那段程序中,如果&dsn为空集,那么在执行set语句的时候发现&dsn中并没有数据可读,整个数据步的执行就到此结束了。
所以说SAS的运行是正常的。只不过是空集的时候,数据步在“if nobs=0”那一句之前就结束了;而在非空集的时候,“if nobs=0”的条件判断又是假的。因此FILE 和PUT那两句永远没有办法执行到。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
fallleafsean + 1 + 1 + 1 分析的有道理

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

使用道具

9
fallleafsean 发表于 2013-1-9 10:00:46 |只看作者 |坛友微信交流群
pobel 发表于 2013-1-9 08:27
这个问题涉及到数据步的“编译”和“执行”。

1. NOBS= 这个选项是SAS在数据步编译过程就能看到,并且 ...
非常感谢~

使用道具

10
zxroliver 发表于 2013-1-9 11:00:43 |只看作者 |坛友微信交流群
不是无法运行,只是没得到你要的结果.是先后顺序问题.
如果先set,没有数据就不把这个obs输出了.
set在后面,是先运行了put,set后没数据,这个数据就不输出了
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
fallleafsean + 1 + 1 + 1 分析的有道理

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 11:52