楼主: zhengjie198
3483 8

如何用Macro去定义多个数据集的名字 [推广有奖]

  • 1关注
  • 2粉丝

本科生

32%

还不是VIP/贵宾

-

威望
0
论坛币
369 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4190 点
帖子
71
精华
0
在线时间
94 小时
注册时间
2009-5-18
最后登录
2022-10-27

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
哪位大侠帮帮忙啊,

我想用一个数据集中的1个变量中的值做数据名称,例如我有数据集a,四个值 a, b, c, d. 我想用这四个值作为数据集的名称,能通过Macro 实现吗?

name
a
b
c
d




二维码

扫码加我 拉你入群

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

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

关键词:Macro Mac CRO acr 如何用 数据 如何

回帖推荐

Imasasor 发表于9楼  查看完整内容

看我这么热心帮你回答问题,施舍点论坛币吧,看我穷的,不像样子了
沙发
ziyenano 发表于 2012-7-9 15:09:36 |只看作者 |坛友微信交流群
可以,具体要求是什么?

使用道具

藤椅
zhengjie198 发表于 2012-7-9 15:55:04 |只看作者 |坛友微信交流群
ziyenano 发表于 2012-7-9 15:09
可以,具体要求是什么?
a b c d 这几个数据集存在另一个文件夹中, 我想调用它们 但是不想逐一的去写调用程序,想用循环来做。我现在又1个list,其中1列就包含所有那个文件夹下的文件名称。我想通过使用这个list来实现调用。

使用道具

板凳
ziyenano 发表于 2012-7-9 16:13:32 |只看作者 |坛友微信交流群
zhengjie198 发表于 2012-7-9 15:55
a b c d 这几个数据集存在另一个文件夹中, 我想调用它们 但是不想逐一的去写调用程序,想用循环来做。我 ...
你意思要将a,b,c,d文件分别导入到SAS里面?

使用道具

报纸
Touyc 发表于 2012-7-9 17:55:41 |只看作者 |坛友微信交流群
%macro b;
proc sql;
select name,count(name) into : name separated by ' ', : n  from a;     /*a为原始数据集,将name变为宏变量,观测数为n*/

%do i=1 %to &n;
%let j= %eval(&i);
%let x=%scan(&name,&j, str( ));        /*截取宏变量*/

    PROC IMPORT OUT=&x
    DATAFILE= "d:\&x..csv"  /*假设a b c 等文件为csv格式的,进行循环导入。其他格式原理一样,改下路径就ok*/
    DBMS=CSV REPLACE;
    RUN;

%end;
%mend b;
%b;



希望可以帮到你~

使用道具

地板
sailingyf 发表于 2012-7-9 18:10:31 |只看作者 |坛友微信交流群
可以用数组,  把列变量的每个值赋值给数组里的相应的变量,做成一个宏变量,然后引用就可以了。

使用道具

7
ziyenano 发表于 2012-7-9 20:37:36 |只看作者 |坛友微信交流群
%macro import(name);
proc import out=&name
datafile="D:\&name..txt"    /*文件物理地址,这里以txt为例*/
dbms=dlm
replace;
getnames=yes;               /*是否取第一行为字段名*/
delimiter=' ';              /*字段之间的分隔符*/
run;
%mend;
data _null_;
informat str $50.;
infile "D:\list.txt";      /*list的物理地址*/
input str;
call execute(compress('%import('||str||')'));
run;

/*如果list文件已经在SAS中*/
data _null_;
informat str $50.;
set list;
call execute(compress('%import('||str||')'));
run;






使用道具

8
Imasasor 发表于 2012-7-9 23:22:56 |只看作者 |坛友微信交流群
将你数据集中一列list的所有观测赋给多少宏变量。然后用宏循环引用即可,如a中观测数为100个。
proc sql;
select list into:list1-:list100 from a;
quit;
%put &list1 &list2 &list100;

%macro a;
%do i=1 %to 100;
&&list&i="这样引用宏变量";
%end;
%mend;
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

9
Imasasor 发表于 2012-7-9 23:24:24 |只看作者 |坛友微信交流群
看我这么热心帮你回答问题,施舍点论坛币吧,看我穷的,不像样子了
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

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

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

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

GMT+8, 2024-4-30 16:46