SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1041|回复: 3
打印 上一主题 下一主题

如何将sas数据集名作为变量值?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-5-13 16:07:17 | 只看该作者

如何将sas数据集名作为变量值?

大家好!
请教一个问题:
我有多个SAS数据集,这些数据集名的一部分是年月,且是连续有序的,由于每个数据集里没有一列时间变量,我想在每一个数据集里增加一个变量,这个变量的值就是所在数据集名字里的时间,如201101,请问该如何实现?

比如数据集 hr201101,我想在这个数据集里增加一个变量date,且让date=201101。
另外,这样的数据集有二十多个。

多谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-5-14 21:35:56 | 只看该作者

Re: 如何将sas数据集名作为变量值?

data hr201101;
x=1;
run;

ods output members=mem;
proc datasets lib=work;
quit;

proc sql;
select name
into :name
from mem
where num=1;
quit;

data hr201101;
set hr201101;
date=substr("&name",3,6);
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-5-15 09:55:50 | 只看该作者

Re: 如何将sas数据集名作为变量值?

[code:1pqzx2z9]/*假设你的逻辑库名为testlib*/
data _null_;
        retain prxId;
        if _n_=1 then prxId=prxparse('m/\d{6}$/');
        set sashelp.vstable(where=(libname='TESTLIB'));
        start=prxmatch(prxId,trim(memname));
        if start>0;
        call execute('data '||trim(libname)||'.'||memname||';set '||trim(libname)||'.'||memname||';length date $6;date ="'||substr(memname,start,6)||'";run;');
run;[/code:1pqzx2z9]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2012-5-15 21:35:16 | 只看该作者

Re: 如何将sas数据集名作为变量值?

byes 的方式高效精彩!
学习一下!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-6 18:18 , Processed in 0.067464 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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