我想把宏存储在目录中。这样做可以让许多宏只与单个文件共享,并引入与用户的某种程度的分离。
要存储宏,我运行一个程序,如
/* HelloWorld.sas */
libname pwd "."; /* assign current directory */
option mstored sasmstore=pwd; /* set pwd as storage directory */
%macro HelloWorld()
/ store source; /* store compiled macro along wi
我试图弄清楚如何在SAS的数据步长内调用循环中的宏变量,但我迷路了;因此我有14个宏变量,我必须将它们与向量的条目进行比较。我试过了:
data work.calendrier;
set projet.calendrier;
do i=1 to 3;
if date= "&vv&i"D then savinglight = 1;
end;
run;
但它不起作用。直到vv3的变量vv1都是日期变量。例如,下面的代码可以工作:
data work.calendrier;
set projet.calendrier;
*do i=1 to 3;
if date=
目标 我有一个名为localOrGlobal的宏,它获取input并创建output。在宏调用期间,output被打印到日志中。但是,我希望用户能够指定是否应该使用参数globalVar = 0将output作为全局变量提供。 问题所在 不幸的是,我无法使output在localOrGlobal调用的作用域之外可用。 代码 /*Data for example purpose*/
data a;
column = "exampleText";
run;
/*The macro. Set 'globalVar = 1' to make the '
基于此,我可以使用以下代码获得程序中已编译的宏的列表,这些宏按第一次出现的顺序排序:
%macro FirstMacro();
%put Hello, World!;
%mend;
%macro SecondMacro();
%put Goodbye, cruel world!;
%mend;
proc sql;
select objname, created
from dictionary.catalogs
where objtype='MACRO' and libname ^= 'SASHELP'
order by created
我正在尝试调用SAS CI上的宏(使用Node进程),但在尝试执行时收到错误消息(1012或3000)。这段代码在SAS企业指南上运行得很好。
我尝试删除"call execute“语法,但没有成功。
DATA _NULL_ ;
SET SMS_TEMP END = EOF ;
IF _N_ = 1 THEN DO UNTIL (EOF);
%build_JSON;
END ;
PUT 'Complete';
STOP ;
RUN ;
完整代码:
DATA _NULL_ ;
SET SMS_TEMP END = EOF ;
IF _N_
给定下面的SAS数据集和宏,请有人解释为什么对宏的前3次调用没有错误,但是第4次调用产生了如下所列的错误消息。如果我不使用宏定义中的“code=A11”(将“代码”改为“代码”)的默认值,那么所有4个调用都会执行而不会出错。为什么会这样呢?我试过退出SAS会话并重新启动,但没有帮助。
新来的SAS。谢谢。非常感谢。:)
------------------- begin code block -----------------------------------
/* data set definition */
data dat5;
infile
因为R和SAS都在统计分析领域,我一直在探索如何使它们更好地相互合作。从URL下载$PROC_R,这是一个允许在基本环境中运行R代码的SAS宏.此外,还遵循补充PDF文件的指示,在桌面上创建修改后的SAS快捷方式,因为我在Windows 8操作系统中使用的是SAS 9.4。
当我执行示例代码时,我会得到两个错误。
SAS代码:
data test;
do x=1 to 4;
array a[4] a1-a4;
do i=1 to 4;
a[i] = rannor(100);
end;
output;
end;
drop i x;
run;
%include "C:\Proc_R.sa
我试着把它放在所有程序之前(使用在预处理中包含代码的选项):
选项ERRORABEND;
它确实会触发一个警告弹出窗口,但会执行下一个文件。例如:
A -> B -> C -> D
如果A有错误,我会得到一个弹出窗口,告诉我发生了错误,服务器已经断开连接,但是,B、C和D也会运行。我希望项目执行在A处停止。
我有几个老项目,有几十个甚至上百个程序,因此我不考虑使用宏(),同时也可以选择检查错误。
可以做些什么呢?
谢谢!
编辑:此指南适用于SAS企业指南7.1
我有一个包含17个平面文件的列表,我正在尝试将它们导入不同的数据集。所有文件都有相同的数据步骤,所以我尝试编写一个do while循环来导入所有文件。
我一直在尝试修改这里的一些代码,但没有成功:
我收到一个错误,上面写着%do statement is not valid in open code。下面是我的代码:
% let path1 = 'c:\path1'
% let path2 = 'c:\path2'
...
% let pathN = 'c:\pathN'
%let n=1;
%do %while (&n <
在SAS EG中,有一个简洁的特性,它允许在键入宏函数时查看宏函数的参数及其定义。
例如,如果我执行:
%macro test
(a /* this is a */
,b /* this is b */
);
%put a b;
%mend;
然后输入%test(,弹出窗口会显示"a :这是一个“等等.
不幸的是,由于某种原因,它似乎只有在当前程序中定义了宏函数时才能工作(因此,基本上在唯一不需要宏函数的地方,就像在这种情况下,它在您的脑海中应该是非常新鲜的)。
在其他程序和其他流程流中,是否有任何方法可以从此特性中受益?
更重要的是,如何从存储的已编译宏中受益?
例如
大家早上好。我正在尝试运行以下代码:
%macro clearALL;
/*delete macro variables*/
data delete;
set sashelp.vmacro;
where scope eq: 'F' and name ne: 'SYS';
run;
data _null_;
set delete;
call symdel(name) ;
run;
%mend clearALL;
%Macro Test;
%do i = 1 %to 18;
%put &= Iteration : &i;
data _n
无法在SAS EG中使用Xcommands。无法访问SAS管理控制台。如何在不使用X命令的情况下获取目录中的文件列表?
尝试了DINFO,但只能获得一条信息。需要所选目录中所有文件的列表。我是不是漏掉了什么?
data a;
rc=filename("mydir", c:\");
put "rc = 0 if the directory exists: " rc=;
did=dopen("mydir");
put did=;
numopts=doptnum(did);
put numopts=;
do i =
我在SAS中多次运行宏,如下所示:
%mymac(a,b);
%mymac(a,c);
.
%mymac(a,a)
%mymac(a,w);
.
我的程序/宏类似于:
/* begin program here */
data original_data;
set mylib.mydata;
run;
%macro mymac(x,y);
data mydata1;
set original_data;
where school_district="&x";
run;
proc means data=mydata1;
var income;
run;
%men