请选择 进入手机版 | 继续访问电脑版
楼主: ivy_jiao
2219 3

[问答] 求助:sas 如何自动import txt 文件 [推广有奖]

  • 7关注
  • 0粉丝

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
33 点
帖子
2
精华
0
在线时间
3 小时
注册时间
2014-10-21
最后登录
2014-11-4

ivy_jiao 发表于 2014-10-21 11:51:54 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
本人sas初学者,遇到一个难题,请求高手指点!问题是这样的,我想要导入txt,| 为分隔符的文件,文件里面的列的数量和名字不确定,为了方便对数据的处理,我打算把所有的列都设成相同的格式 字符型200;  如下,不知道为什么 循环总是有问题。

txt file 数据举例(第一行是header):
table1|table2|table3|table4|num
a|b|c|d|3
a|b|c|d|4
a|b|c|d|5
a|b|c|d|6

%let file=C:\Documents and Settings\Administrator\桌面\result_201105_201304.txt
data  aa;
INFILE "&file "
        MISSOVER
        DSD lrecl=32767
        firstobs=1
        obs=1
        ;
INPUT a : 美元符号32767. ;
run;

proc sql;
select max(count(a,'|'))+1 into:num
from aa;
quit;

%macro group(n);
data out1;
set aa;
%do i=1 %to &n;
var&i=scan(a,&i,'|');
%end;
run;
%mend;
%group(&num);
--------------------------------------------------
以上是博客上学来的,把列名提取出来,后面是我有问题的code

--------------------------------------------------
* create 宏变量,每个宏变量对应一个header的name
%macro var(n);
%do i=1 %to &n;
select var&n from out1
into: var&n;
%put var&n=var&n;
%end;
%mend;
%var(&num);

data        out1        ;                                                                        
infile        "&file"        delimiter        =        '|'        MISSOVER        DSD        lrecl=32767        firstobs=2        ;

do i= 1 to #
informat &&var&i  美元符号200.;;
end;
do i= 1 to #
format &&var&i  美元符号200.;;
end;

input
do i= 1 to #
&&var&i  美元符号;
end;

---------------------------------------------------
非常感谢!

二维码

扫码加我 拉你入群

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

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

关键词:import Port txt delimiter documents sas 自动 导入不同格式数据

sonypam 在职认证  发表于 2014-10-22 05:56:32 |显示全部楼层 |坛友微信交流群
%let file = C:\Documents and Settings\Administrator\桌面\result_201105_201304.txt
proc import datafile = "&file"
     out = outdata  /*you can change outdata to dataset name you want*/
     dbms = dlm
     replace;
     delimiter = '|';
run;

使用道具

sonypam 在职认证  发表于 2014-10-22 06:00:20 |显示全部楼层 |坛友微信交流群
还有个技巧,当run这段代码之后,不能成功运行,点击F4, SAS会自动把生成的data step的代码显示在你的工作窗口上,你可以自己调节各个variable的长度和类型,希望有帮助。

使用道具

ivy_jiao 发表于 2014-10-23 13:37:04 |显示全部楼层 |坛友微信交流群
sonypam 发表于 2014-10-22 06:00
还有个技巧,当run这段代码之后,不能成功运行,点击F4, SAS会自动把生成的data step的代码显示在你的工作窗 ...
太感谢了,谢谢你!!!!

使用道具

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

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

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

GMT+8, 2024-4-16 21:10