SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

请问如何能够进行“程序外”的输入

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2006-3-13 15:50:47 | 只看该作者

to shiyiming

对于你的这段程序我还是有些不明白

[code:a30f5]
filename getfiles pipe "dir/b D:\temp\*.sas";
data filenams;
infile getfiles;
length filename $200;
input filename;
filename=upcase(filename);
run;
[/code:a30f5]

程序将"dir/b D:\temp\*.sas"中的所有sas文件都读入filename数据集,那么它们是以什么样的形式合并的呢?

因为Pipe我不会用,所以不太明白你的第一句。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2006-3-14 13:31:37 | 只看该作者

to maurice

pipe是SAS新的管道功能,可以参见HELP。
这段程序是读入所有*.sas的文件名,输出到数据集filename。
你可以运行一下程序体会一下。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2006-3-20 17:58:21 | 只看该作者

to shiyiming

我现在想做这样一件事:
将"d:\temp"中的所有的txt文件导入到SAS当中,并去除其中的开头18行。
当只导入一个文件的时候,我用proc import完成的很好。多个文件的导入时,我想借鉴你写的程序,但是却不知如何将获取到的文件名应用在proc import中。我的文件是以tab为delimiter的。

以下是我写的一段程序,运行不通,但不明白为什么。

[code:da068]
filename getfiles pipe "dir/b D:\temp\*.txt";
data test;
n=0;
infile getfiles
       end=done;
length filenames $ 200;
input filenames;
n=n+1;
call symput('x',n);
call symput('filename',filenames);
if done ne 0 then
proc import out=raw&x;
       DATAFILE = "D:\temp\&filename"
           DBMS =tab replace;
         getnames=no;
         datarow=18;
run;
[/code:da068]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2006-3-23 09:40:34 | 只看该作者

无意中的发现

无意中发现,其实直接在导入的path中写*.txt就行。
[code:22ba4]
PROC IMPORT OUT= import
            DATAFILE= "E:\temp\*.txt"
            DBMS=TAB REPLACE;
     GETNAMES=NO;
     DATAROW=18;
RUN;
[/code:22ba4]
SAS会将所有的txt文件存入一个数据集。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
15#
 楼主| 发表于 2006-3-23 10:20:06 | 只看该作者

to maurice

你的语法完全不正确,建议你要参加PROG1,PROG2和MACRO这么几门培训课程,否则你的编程效率不够高。要努力哦!
[code:bb8ed]%macro import_file;

filename getfiles pipe "dir/b D:\temp\*.txt";

data filenames;
        infile getfiles;
        length filename $200;
        input filename;
        filename=upcase(filename);
        call symput('obs', _n_);
run;

%do i=1 %to &obs;
        %let dsid=%sysfunc(open(filenames, i));
        %let rc=%sysfunc(fetchobs(&dsid, &i));
        %let filename=%sysfunc(getvarc(&dsid, %sysfunc(varnum(&dsid, filename))));
        %let rc=%sysfunc(close(&dsid));

        proc import out=raw&i datafile="D:\temp\&filename" dbms=tab replace;
                getnames=no;
                datarow=18;
        run;
%end;

%mend import_file;

%import_file;[/code:bb8ed]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
16#
 楼主| 发表于 2006-3-23 15:15:19 | 只看该作者

to shiyiming

十分感谢你对我的帮助!
   的确,我的syntax非常差。我基本上是照着SAS9 的documentation遍的。
目前我在看the little sas book。至于培训,我觉得太贵了。今后争取让单位出钱供我去上课。
   再次感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-9 22:46 , Processed in 0.070131 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表