如何理解sas data set步过程

如何理解SAS DATA步过程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何理解SAS DATA步过程
上传于||文档简介
&&如​何​理​解​S​A​S​ ​D​A​T​A​步​过​程
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩17页未读,继续阅读
你可能喜欢苹果/安卓/wp
苹果/安卓/wp
积分 173, 距离下一级还需 87 积分
权限: 自定义头衔
道具: 彩虹炫, 雷达卡, 热点灯, 雷鸣之声, 涂鸦板, 金钱卡, 显身卡, 匿名卡下一级可获得
权限: 签名中使用图片
购买后可立即获得
权限: 隐身
道具: 金钱卡, 雷鸣之声, 彩虹炫, 雷达卡, 涂鸦板, 热点灯
问题是:病案首页的手术编码有7个。一台手术的手术码可能由几个手术(ssjczbm1 ,ssjczbm2,ssjczbm3,ssjczbm4,ssjczbm5,ssjczbm6,ssjczbm7)编码组成。我怎么能用更快的方式,用循环等等书写&&7个手术码? 变量的意义:①&&JBDN(主要诊断的ICD-10 编码);②&&ssjczbm1 ,ssjczbm2,ssjczbm3,ssjczbm4,ssjczbm5,ssjczbm6,ssjczbm7&&( 手术编码) 例如:急性心肌梗死的提取条件是:主要诊断为I21、I22编码为急性心肌梗死,排除编码为心脏手术的患者。(substr(JBDM,1,3)=&I21& OR substr(JBDM,3)= &I22&)AND (substr手术码,1,2)^=&35&&&OR substr(手术码,1,2)^=&36&&&OR substr (手术码,1,2)^=&37& ) 怎么能快速的从这样的书写
&&& && &&&/*binghzong=1 急性心肌梗死& & */& & data b1;& & & & if & & & && &( substr(JBDM,1,3)='I21' OR& & substr(JBDM,1,3)='I22' )&&& & AND & & & && &( substr(ssjczbm1,1,2)^=&35&&&OR substr(ssjczbm1,1,2)^=&36&&&OR substr(ssjczbm1,1,2)^=&37&&&) & & AND&&cykb=&04&& && & then& & bingzhong=1;& & run;& &
转变成有7个手术码&&& && &&&/*依次给予病种赋值*/& & /*binghzong=1 急性心肌梗死& & */& & data b1;& & & & if & & & && &(substr(JBDM,1,3)='I21' OR& & substr(JBDM,1,3)='I22' )&&& & AND & & & && &( substr(ssjczbm1,1,2)^=&35&&&OR substr(ssjczbm1,1,2)^=&36&&&OR substr(ssjczbm1,1,2)^=&37& OR& & & && &&&substr(ssjczbm2,1,2)^=&35&&&OR substr(ssjczbm2,1,2)^=&36&&&OR substr(ssjczbm2,1,2)^=&37& OR& & & && &&&substr(ssjczbm3,1,2)^=&35&&&OR substr(ssjczbm3,1,2)^=&36&&&OR substr(ssjczbm3,1,2)^=&37& OR& & & && &&&substr(ssjczbm4,1,2)^=&35&&&OR substr(ssjczbm4,1,2)^=&36&&&OR substr(ssjczbm4,1,2)^=&37& OR& & & && &&&substr(ssjczbm5,1,2)^=&35&&&OR substr(ssjczbm5,1,2)^=&36&&&OR substr(ssjczbm5,1,2)^=&37& OR& & & && &&&substr(ssjczbm6,1,2)^=&35&&&OR substr(ssjczbm6,1,2)^=&36&&&OR substr(ssjczbm6,1,2)^=&37& OR& & & && &&&substr(ssjczbm7,1,2)^=&35&&&OR substr(ssjczbm7,1,2)^=&36&&&OR substr(ssjczbm7,1,2)^=&37& & & & && & ) & & AND&&cykb=&04&& && & then& & bingzhong=1;& & run;& &
因为我有很多病种,下面的胰腺切除术提取的条件是(SUBSTR(手术码,1,5)&=&42.40& AND SUBSTR(手术码,1,5)&=&42.42&)OR (SUBSTR(手术码,1,5)&=&42.51& AND SUBSTR(手术码,1,5)&=&42.56&)OR (SUBSTR(手术码,1,5)&=&42.58& AND SUBSTR(手术码,1,5)&=&42.59&)OR (SUBSTR(手术码,1,5)&=&42.61& AND SUBSTR(手术码,1,5)&=&42.69&) /*binghzong=25 胰腺切除术*/data b25;if&&(& && & ( substr(ssjczbm1,1,5)&=&42.40& AND&&substr(ssjczbm1,1,5)&=&42.42& ) & & OR ( substr(ssjczbm1,1,5)&=&42.51& AND&&substr(ssjczbm1,1,5)&=&42.56& ) & & OR ( substr(ssjczbm1,1,5)&=&42.58& AND&&substr(ssjczbm1,1,5)&=&42.59& )& & OR ( substr(ssjczbm1,1,5)&=&42.61& AND&&substr(ssjczbm1,1,5)&=&42.69& ))AND cykb=&04&then bingzhong=25;run; 我怎么能快速的写上ssjczbm1 ,ssjczbm2,ssjczbm3,ssjczbm4,ssjczbm5,ssjczbm6,ssjczbm7& &这7个手术码?有些手术的条件很多的,写上一个手术码已经很长了,囊括7个手术码实在很让人抓狂。
载入中......
变量的意义:
①        JBDN(主要诊断的ICD-10 编码);& &错了&&,应该是 JBDM。
substr(ssjczbm1,1,2)^=&35&&&OR substr(ssjczbm1,1,2)^=&36&&&OR substr(ssjczbm1,1,2)^=&37&这是个永远成立的条件.
Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.
论坛好贴推荐
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
为做大做强论坛,本站接受风险投资商咨询,请联系(010-)
邮箱:service@pinggu.org
合作咨询电话:(010)
广告合作电话:(刘老师)
投诉电话:(010)
不良信息处理电话:(010)
京ICP证090565号
京公网安备号
论坛法律顾问:王进律师sas&import过程步学习&
运用import过程进行SAS数据导入完全实用教程
单个规范格式文件导入。
对单个文件进行导入是我们遇到最多的情况,主要有以下几种:
1.1 对指定分隔符(’|’,’ ’,’!’,’ab’等)数据的导入,这里以’!’为例delimiter='!'进行说明:
data _null_;
'c:\temp\pipefile.txt';
&&put"X1!X2!X3!X4";
&&put "11!22!.! ";
"111!.!333!apple";
导入程序:
proc import
&&datafile='c:\temp\pipefile.txt'
&&out=work.test
&&dbms=dlm
delimiter='!';
GUESSINGROWS=2000;
DATAROW=2;
&&getnames=
注意GUESSINGROWS的值阈为1 到 3276
1.2 对CSV格式的数据进行导入:
data _null_;
'c:\temp\csvfile.csv';
"Fruit1,Fruit2,Fruit3,Fruit4";
"apple,banana,coconut,date";
"apricot,berry,crabapple,dewberry";
导入程序:
proc import
&&datafile='c:\temp\csvfile.csv'
&&out=work.fruit
&&dbms=csv
1.3 对tab分隔数据的导入:
data _null_;
'c:\temp\tabfile.txt';
&&put "cereal" "09"x
"eggs" "09"x "bacon";
&&put "muffin" "09"x
"berries" "09"x "toast";
proc import
&&datafile='c:\temp\tabfile.txt'
&&out=work.breakfast
&&dbms=tab
&&getnames=
1.4 对dbf数据库数据进行导入:
proc import datafile="/myfiles/mydata.dbf"
&&&&&&&&&&&&&&out=sasuser.mydata
&&&&&&&&&&&&&&dbms=dbf
&&&&&&&&&&&&&&
1.5对excel数据进行导入:
PROC IMPORT OUT= hospital1
&&&&&&&&&&&&DATAFILE=
" C:\My Documents\Excel Files\Hospital1.xls "
&&&&&&&&&&&&DBMS=EXCEL
&&&&&SHEET="Sheet1$";
&&&&&GETNAMES=YES;
&&&&&MIXED=NO;
&&&&&SCANTEXT=YES;
&&&&&USEDATE=YES;
&&&&&SCANTIME=YES;
1.6对access数据进行导入:
IMPORT DBMS=ACCESS TABLE="customers" OUT=sasuser.
&&&&&DATABASE="c:\demo\customers.mdb";
&&&&&UID="bob";
&&&&&PWD="cat";&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WGDB="c:\winnt\system32\system.mdb";&
proc print data=sasuser.
1.7 import过程步中,dbms选项汇总:
Identifier
Data Source
Host Availability
Access 2000 or 2002 table
Microsoft Windows *
Microsoft Access 97 table
Microsoft Windows *
ACCESS2000
Microsoft Access 2000 table
Microsoft Windows *
ACCESS2002
Microsoft Access 2002 table
Microsoft Windows *
Microsoft Access table
file (comma-separated values)
OpenVMS Alpha, UNIX, Microsoft Windows
dBASE 5.0,
IV, III+, and III files
UNIX, Microsoft Windows
file (default delimiter is a blank)
OpenVMS Alpha, UNIX, Microsoft Windows
Excel 2000
or 2002 spreadsheet
Microsoft Windows *
spreadsheet
Microsoft Windows
Excel 5.0 or
7.0 (95) spreadsheet
Microsoft Windows
Excel 97 or
7.0 (95) spreadsheet
Microsoft Windows *
Excel 2000 spreadsheet
Microsoft Windows *
Excel spreadsheet
UNIX, Microsoft Windows
Files on PC server
delimited file (tab-delimited values)
OpenVMS Alpha, UNIX, Microsoft Windows
Lotus 1-2-3
Release 2 spreadsheet
Microsoft Windows
Lotus 1-2-3
Release 3 spreadsheet
Microsoft Windows
Lotus 1-2-3
Release 4 or 5 spreadsheet
Microsoft Windows
2 导入一个文件夹下的所有文件的数据。
<font COLOR="#FF下面的代码导入一个文件夹下的所有文件的数据,要使用本代码需注意几点:首先,这个文件夹下的数据文件必须是同一类型分隔的数据,比如例子中都是tab分隔的txt文件,当然也可以对本代码进行改进,例如中间的proc
import的dbms改为excel,就可以导入excel文件了。其次,本代码直接将文件名作为SAS数据集的名字,因此文件名必须是英文,且满足SAS命名规则。
%macro directory(dir=);
rs=%sysfunc(filename(filref,&dir));
did=%sysfunc(dopen(&filref));
nobs=%sysfunc(dnum(&did));
%do i=1 %to &nobs.;
name=%qscan(%qsysfunc(dread(&did,&i)),1,.);
ext=%qscan(%qsysfunc(dread(&did,&i)),-1,.);
import out=&name.
datafile="&dir.\&name..&ext" dbms=tab
&&&&&&&&getnames=
&&&&&&&&datarow=1;
rc=%sysfunc(dclose(&did));
%directory(dir=C:\PRIVATE);
如果要将数据集进行汇总到一张表,或者则可以直接将proc import
out=&name中的&name改为a&i,然后对所有的a:数据集进行set操作。除此之外,我们还可以对&ext进行设置来达到读取指定文件格式的数据。
2.2 这里运用pipe读取到文件名称,再读取数据。首先建立三个数据集:
data _null_;
'c:\junk\extfile1.txt';
&&put "05JAN301
1.59 9.54";
&&put "12JAN219
2.99 8.97";
data _null_;
'c:\junk\extfile2.txt';
&&put "02FEB219
2.99 2.99";
&&put "05FEB901
1.99 5.97";
&&put "07FEB135
3.00 6.00";
data _null_;
'c:\junk\extfile3.txt';
&&put "06MAR101
3.59 14.36";
&&put "12MAR219
2.99 5.98";
filename blah pipe 'dir C:\Junk /b';
data _null_;
&&infile blah truncover
&&length fname $20;
symput('fname'||trim(left(put(i,8.))),scan(trim(fname),1,'.'));
symput('pext'||trim(left(put(i,8.))),trim(fname));
&&if last then call
symput('total',trim(left(put(i,8.))));
%macro&test;
&&%do i=1 %to
import datafile="c:\Junk\&&pext&i"
&&&&&&&&&&&&&&&&&out=work.&&fname&i
&&&&&&&&&&&&&&&&&dbms=dlm
&&&&&delimiter='
&&&&&getnames=no
print data=work.&&fname&i;;
&&&&&title
&&fname&i;
这里,如果要导入指定文件类型的数据,例如txt,则只需要将filename blah pipe 'dir C:\Junk
/b';改为filename blah pipe 'dir C:\Junk.*.txt /b';即可。
除了用filename blah pipe 'dir C:\Junk.*.txt
/b';得到指定类型的文件名,我们还可以%sysexec dir *.xls /b/o:n &
flist.来将xls文件输出到指定的文件中,供读取操作用。这个将在下面的内容作介绍。
导入excel表中的所有sheet的数据,并将其汇总到一个数据表中。
3.1 Excel表是sas导入导出最多的数据表之一,本例中,我们将导入一个excel中的不同的数据
dir=C:\ExcelF&&&&&&
%macro ReadXls (inf);
libname excellib excel "&dir.\&inf";
&&&&create
table sheetname as
&&&&select
tranwrd(memname, "''", "'") as sheetname
sashelp.vstabvw
libname="EXCELLIB";
&&&&select
count(DISTINCT sheetname) into :cnt_sht
&&&&select
DISTINCT sheetname into :sheet1 -
:sheet%left(&cnt_sht)
%do i=1 %to &cnt_
&proc import
datafile="&dir.\&inf"
&&&&&&&out=sheet&i
&&&&&&&sheet="&&sheet&i";
&&&&&&&getnames=
&&&&&&&mixed=&&&&&&
proc append base=master data=sheet&
%mend ReadX
%ReadXls(all1.xls);
这样,我们可以通过%ReadXls(all2.xls);
%ReadXls(all3.xls);等来得到多个excel文件的所有数据集。
3.2 我们可以结合3.1和2.1或2.2的方法来读取多个文件中的多个表。这里再介绍一种新的读取多个文件的方法:
%macro ReadXls (dir=);
%sysexec cd & %sysexec dir *.xls /b/o:n &
&&&&length
filen $200;
&&&&infile
"&dir./flist.txt";
&&&&select
count(filen) into :cntfile from _
&cntfile&=1 %then %
&&&&select
filen into :filen1-:filen%left(&cntfile)
%do i=1 %to &
libname excellib excel
"&dir.\&&filen&i";&
&&&&create
table sheetname as
&&&&select
tranwrd(memname, "''", "'") as sheetname
sashelp.vstabvw
libname="EXCELLIB";
&&&&select
count(DISTINCT sheetname) into :cnt_sht
&&&&select
DISTINCT sheetname into :sheet1 -
:sheet%left(&cnt_sht)
%do j=1 %to &cnt_
import datafile="&dir.\&&filen&i"
&&&&&&&&&&out=sheet&j
&&&&&&&&&&sheet="&&sheet&j";
&&&&&&&&&&getnames=
&&&&&&&&&&mixed=
data sheet&j;
_excelfilename $100 _sheetname $32;
&&&_excelfilename="&&filen&z";
&&&_sheetname="&&sheet&j";
proc append base=master data=sheet&
%mend ReadX
%readxls&(dir=C:\ExcelFiles);
从多个文件夹下读取多个数据。
直接给源代码吧。
%macro etl(ds, ds2,path);
data &ds &ds2;
LENGTH DateTime 8
UserName $ 20
Submit $ 10
SentNumber $ 11
MessageID $ 15
SendingMode $ 6
Contents $ 160 ;
%let filrf=
%let rc=%sysfunc(filename(filrf,"&path"));
%let did=%sysfunc(dopen(&filrf));
%let memcount=%sysfunc(dnum(&did));
%do i=1 %to &
AccountNum+1;
%let counter = AccountN
%let username&i=%sysfunc(dread(&did,&i));
%let filref=mydir2;
file=%sysfunc(filename(filref,"&path\&&username&i"));
%let op=%sysfunc(dopen(&filref));
%let flcount=%sysfunc(dnum(&op));
filename FT77F001
"D:\SMSGatewayData2\USERS\&&username&i\*.log";
%do j=1 %to &
%let trans&j=%sysfunc(dread(&op,&j));
%put '&&username&i = ' &&username&i
'&&trans&j= ' &&trans&j '&flcount = '
&flcount '&filref = ' &filref '&filrf = '
infile FT77F001 filename=filename eov=eov end = done length=L
INPUT DateTime : ANYDTDTM19.
UserName $
SentNumber $
MessageID $
SendingMode $
Contents $;
%etl(sms2, sms,D:\SMSGatewayData2\USERS)
这里就不做测试了,原理其实跟3.2差不多,就是将目录也参数化。
参考文献:
Case Study of Importing Multiple Worksheet Files
/proceedings/sugi31/034-31.pdf
Reading multiple files with PROC
/kb/24/707.html
How to Invoke PROC IMPORT to read a CSV, TAB or Delimited
/techsup/download/sample/datastep/import.html
Use PROC IMPORT to read a CSV, TAB or delimited file.sas
Reading multiple files with PROC IMPORT.sas
directory_import_dbms.sas
proc_import_dbf.html
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。苹果/安卓/wp
苹果/安卓/wp
积分 423, 距离下一级还需 27 积分
权限: 自定义头衔, 签名中使用图片
道具: 彩虹炫, 雷达卡, 热点灯, 雷鸣之声, 涂鸦板, 金钱卡, 显身卡, 匿名卡下一级可获得
道具: 抢沙发
购买后可立即获得
权限: 隐身
道具: 金钱卡, 雷鸣之声, 彩虹炫, 雷达卡, 涂鸦板, 热点灯
苦逼签到天数: 338 天连续签到: 2 天[LV.8]以坛为家I
本帖最后由 augustin4 于
23:42 编辑
有很多个类似的数据集,我想把它们依次在一个过程步中调用。之前尝试用%macro定义数据集名,再在过程步中用data=%调用,但失败了。
很不错的思路,恭喜楼主自己解决了
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
augustin4 发表于
第二个代码终于解决了。我发现直接在调用随机数的数据步里用set 多次串接随机数的数据集就可以了。
于是 ...很不错的思路,恭喜楼主自己解决了
楼主你好,对于你描述的问题,感觉不是很清晰,什么叫依次调用?是要把那些数据集里面的数据都先弄到一起然后做一些处理吗?如果是的话,请使用set命令,可以一次合并多个数据集,也可以多个set命令。如果楼主想要单独处理每个数据集,那可以用macro写一个%do循环,依次data部每个数据集,这样得到的结果就是每个数据集里面的内容都得到了处理,但是又不会搞到一起。如果楼主没有明白的话,请给出数据集的文件以及想要得到什么结果,我直接给出相应的代码。
本帖最后由 augustin4 于
17:42 编辑 sniperhgy 发表于
楼主你好,对于你描述的问题,感觉不是很清晰,什么叫依次调用?是要把那些数据集里面的数据都先弄到一起然 ...好像是没说清楚。
其实遇到了两个问题,但搞混了。
第一个是要用50支股票的数据分别做50次回归
第二个问题是有一组随机数,但我需要调用多次,在一个data步中计算套期保值(随机数的线性方程)的一个概率。
第一个问题好像能放在一个数据集中通过分类变量分别回归。但我觉得应该也能通过宏来实现
第二个问题调用的数据集是同一个,但没法通过循环和set使数据集读入多次(set在循环后会接着读)。我
想用一个%marco循环使用那个数据集。
不知道能不能实现。宏编程只简单得看过点教程
augustin4 发表于
好像是没说清楚。
其实遇到了两个问题,但搞混了。
第一个是要用50支股票的数据分别做50次回归问题一:
50只股票的数据,是一只股票一个数据集吗?如果是的话,不用放到一起,写个循环就行了:data para_
&&input DTNAME $32.;
&&
datasetname1
.
.
.
datasetname50
;
%macro LoopR
&&
& & select count(*) into :para_count
& & from para_list
& & ;
&&
&&%do i = 1 %to &para_count.;
& & data _null_;
& && &set para_list(firstobs = &i. obs = &i.);
& && &call symput(&DT&, strip(DTNAME));
& &
& & proc reg
& && &data = &DT.
& && &...;
& &
&&%
%复制代码问题二的话,用上述代码可以自行指定要读取的obs啊,然后将需要用到的数据都保存到宏变量里面,这样用的话,就不怕set会自动下移指针了。
根据规定进行奖励
热心帮助其他会员
总评分:&论坛币 + 80&
学术水平 + 1&
信用等级 + 1&
本帖最后由 augustin4 于
23:10 编辑 sniperhgy 发表于
50只股票的数据,是一只股票一个数据集吗?如果是的话,不用放到一起,写个循环就行了:问题二 ...
2 6
3 3
1 3
2 8
;
5 6
3 4
7 8
1 3
;
data para_
input DTNAME $32.;
%macro LoopR
& &
& & select count(*) into :para_count
& && &&&from para_list
& && &&&;
& && &&&
& && &&&%do i=1 %to &para_
& && && &data _null_;
& && && &set para_list(firstobs=&i obs=&i);
& && && &call symput(&DT&,strip(DTNAME));
& && && &
& && && &proc reg data=&DT;
& && && &model y=x;
& && && &
& && && &%
& && &&&%
& && &&&%loopreg复制代码很棒!第一个问题我解决了。但21行和26行的句号&.&不知道干什么用的,我没有输
sniperhgy 发表于
50只股票的数据,是一只股票一个数据集吗?如果是的话,不用放到一起,写个循环就行了:问题二 ...第二个问题还是没有明白,麻烦你讲的清楚一点。是一个
关于套期保值的问题。先生成随机数,再带入估计概率。*-------simulated是生成的两个随机数------*;
*--------数出随机数的个数-------*;
select count(*) into :cou
*--------输入两种可能方案的系数-------*;
1 2
3 1
;
*-------先输入系数,再输入所有随机数,计算盈利大于10的个数,记为qualified,再用频率估计概率,输出--------*;
data count(keep=prob);
&&do i=1 to &
&&& & & & set simulated end=
& &&&hedgerevenue=dmcost*dm+bpcost*
& & & &&&if hedgerevenue&10 then qualified+1;
& & & &&&prob=qualified/&
& & & &&&
& & & &
复制代码
sniperhgy 发表于
楼主你好,对于你描述的问题,感觉不是很清晰,什么叫依次调用?是要把那些数据集里面的数据都先弄到一起然 ...谢谢你帮我回答问题!
但关于宏我还是有一点问题想请教你:
1,%do 循环可不可以不加%to, 像数据步那样do i=a,b,c?我想直接
2 6
3 3
1 3
2 8
;
5 6
3 4
7 8
1 3
;
%
%do i=a,b;
proc reg data=&i;
model y=x;
%
%
%test复制代码这样调用数据集,但总是提示没有%to
2.我看到教材上可以这样命名一组数据集:%macro names(name, number);
%do n=1 %to &
&name&n
%
%复制代码然后作为数据步的名称使用:data %names(dsn, 5);
复制代码那这种形式能不能在过程步中用呢?如:proc reg data=%names(dsn,5);
model y=x;
复制代码(悬赏已加)
augustin4 发表于
第二个问题还是没有明白,麻烦你讲的清楚一点。是一个
关于套期保值的问题。先生成随机数,再带入估计概 ...第二个问题楼主的貌似已经自己解决了啊?还是楼主有其他的要求,我看楼主那个代码是可以应用的啊……
augustin4 发表于
谢谢你帮我回答问题!
但关于宏我还是有一点问题想请教你:
1,%do 循环可不可以不加%to, 像数据步那样 ...两个问题,咱们一一解释一下:
1.%do是否可以像do那样直接使用 :
这个问题的答案会让楼主失望:不能。%do必须和%to搭配
但是也有一些变通的方式,比如 :%let mvar1 = A;
%let mvar2 = B;
%let mvar3 = C;
%
& & %do i = 1 %to 3;
& && &&&%put mvar&i = &&mvar&i;
& & %
%
%复制代码或者%let list_of_values = A B C;
%macro example2;
& & %do i = 1 %to 3;
& && &&&%let mvar = %scan(&list_of_values, &i, %str( ));
& && &&&%put mvar = &
& & %
%mend example2;
%example2;复制代码2.关于一组数据集的调用
请楼主运行想像一下代码运行的效果:%macro names(name, number);
&&%do n=1 %to &
& & &name&n
&&%
%
data %names(dsn, 5);
复制代码这段代码可以自动生成dsn1 - dsn5一共五个数据集,对不对,语法上data后面是可以写入多个数据集的。
楼主想要将这个宏应用于proc部,当然是可以的,但是前提是,用的地方必须支持多个数据集作为参数,比如:
&&delete
& & %names(dsn, 5)
&&;
复制代码这样就会将DSN1 - DSN5删除掉。
但是楼主要用的那个地方是proc reg后面的data =, 据我所知,这个后面只需放一个数据集的名字吧?所以楼主的那个用法,不可以的。
热心帮助其他会员
总评分:&论坛币 + 5&
学术水平 + 1&
热心指数 + 1&
论坛好贴推荐
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
为做大做强论坛,本站接受风险投资商咨询,请联系(010-)
邮箱:service@pinggu.org
合作咨询电话:(010)
广告合作电话:(刘老师)
投诉电话:(010)
不良信息处理电话:(010)
京ICP证090565号
京公网安备号
论坛法律顾问:王进律师}

我要回帖

更多关于 sas data set 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信