在我的代码中,我有几个宏.宏A是主宏.宏A然后调用宏B,宏B又调用宏C.
在SAS中,我是否必须按向后顺序定义它们?换句话说,我必须首先定义宏C,然后定义宏B,然后定义宏A吗?或者它是否重要,因为SAS在实际命中运行宏之前读取所有代码?就此而言,我可以发出命令来运行宏作为我的代码中的第一个语句,然后在命令下面定义宏吗?
谢谢!
一般来说,我们如何处理需要在宏内部修改宏变量的情况; 例如,假设我有这个宏:
%macro test (arg=);
array arrayone [&arg]; /* This is ok */
array arraytwo [&arg+1] /* This is not ok. How to make it work? */
...
Run Code Online (Sandbox Code Playgroud)
当我想要%test(3)然后arraytwo需要采用维度4时,我们如何管理这些情况?
有人知道什么是SAS的最佳R替代品.或者持续.运营商?我没找到.
SAS拥有第一名.最后.自动变量,用于识别具有特定变量的相同值的组中的第一个和最后一个记录; 所以在以下数据集中定义了FIRST.model和LAST.model:
Model,SaleID,First.Model,Last.Model
Explorer,1,1,0
Explorer,2,0,0
Explorer,3,0,0
Explorer,4,0,1
Civic,5,1,0
Civic,6,0,0
Civic,7,0,1
Run Code Online (Sandbox Code Playgroud) 我最近继承了一个看起来像这样的SAS程序:
%MACRO ComplicatedStuff( GroupId= );
%LET FileId = %SYSFUNC( OPEN( Work.BigDataSet ) );
%PUT 'Doing something really difficult with ' &GroupId.;
%LET CloseRC = %SYSFUNC( CLOSE( &FileId. ) );
%MEND ComplicatedStuff;
%ComplicatedStuff(GroupId=ABC1);
%ComplicatedStuff(GroupId=DEF2);
%ComplicatedStuff(GroupId=3GHI);
%ComplicatedStuff(GroupId=J4KI);
Run Code Online (Sandbox Code Playgroud)
作为一个多方面的程序员,我看着这个并且想"我肯定能让这个变得更有活力".果然,我能够使用以下方法开发我认为简单的解决方案CALL EXECUTE:
DATA Work.IDs;
INPUT ID $4.
;
DATALINES;
ABC1
DEF2
3GHI
J4KI
RUN;
DATA Work.CommandDebug;
SET Work.IDs;
Command = CATS(
'%ComplicatedStuff(GroupId=', ID, ');'
);
CALL EXECUTE( Command );
RUN;
Run Code Online (Sandbox Code Playgroud)
我很满意这个解决方案,直到将ComplicatedStuff生成的文件FTP到另一台服务器.我们的SAS服务器在Unix上运行,SAS管理员为我们创建了一个有用的小宏来调用named %sas_sftp(因为,我被告知,x代码变得非常难看).不幸的是,我无法发布%sas_sftp代码 - 它属于我的公司,我不认为他们想要它.
我尝试像调用%sas_sftp宏一样调用%ComplicatedStuff …
我有一个60gb的sas7bdat文件我试图在R中进行子集.有没有人知道这样做的方法?
我有SAS,它需要大约14分钟才能完成,但是我想在R中做到这一点.
谢谢
当使用SAS将ODS转换为PDF时,是否可以包括提交的语法甚至输出日志文件?
例如,给出这个简单的代码:
ods pdf file = "c:\temp\myPDF.pdf";
proc reg data = mydata;
model y = x;
run;
ods pdf close;
Run Code Online (Sandbox Code Playgroud)
我可以得到回归输出和附图.但是有可能像这样将所附的命令合并到PDF中吗?
proc reg data = mydata;
model y = x;
run;
Run Code Online (Sandbox Code Playgroud) 我在SAS中多次运行宏,如下所示:
%mymac(a,b);
%mymac(a,c);
.
%mymac(a,a)
%mymac(a,w);
.
Run Code Online (Sandbox Code Playgroud)
我的程序/宏类似于:
/* 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;
%mend mymac;
Run Code Online (Sandbox Code Playgroud)
我意识到我忘记了一个分号(如(a,a)中所示)并且SAS似乎并不介意.它运行所有的宏调用没有问题.当我添加分号时,我比较了输出,我看不出有什么区别.
这是正常的,SAS没有丢失分号的错误吗?
在SAS中,如果我有一个字符串或数组,如下所示,
array x[4] $1 ('A' 'B' 'C' 'D');
Run Code Online (Sandbox Code Playgroud)
我需要生成元素的所有"唯一"排列,如下所示,
[ABCD]
[ABC]
[BCD]
[ACD]
[ABD]
[AB]
[AC]
[AD]
[BC]
[BD]
[CD]
[A]
[B]
[C]
[D]
Run Code Online (Sandbox Code Playgroud)
SAS中是否有一个函数用于生成阵列的所有可能组合?
SAS Enterprise Miner具有称为"分数代码节点"的东西.此节点将所有先前的代码(即创建新变量,输入缺失值,运行模型等)应用于完全未触及的数据集.除了使用保持样本(即测试数据)之外,我如何在R中执行此操作?
是否有一些快捷方式可以在 SAS Enterprise Guide 中注释所选代码?
有 Ctrl + / 注释所选行。但是仅对代码的选定部分进行注释会非常有用。
谢谢。