是否可以将SAS脚本或宏分配给Base SAS中的工具栏按钮?即你能'宏'或sas脚本吗?
我想将宏变量中某个句点的任何实例更改为下划线.我究竟做错了什么?
%let pow=0.1;
%let x = %sysfunc(tranwrd(&pow,".","_"));
%put x=&x;
Run Code Online (Sandbox Code Playgroud)
输出:
X = 0.1
我只是想连接两个引用的宏变量,但似乎没有一个简单的方法.
说我们有:
%LET VAR1="This is not the greatest song in the world";
%LET VAR2="this is just a tribute.";
%LET TRIBUTE=%SYSFUNC(CATX(%STR( ),&VAR1,&VAR2));
%PUT &TRIBUTE;
Run Code Online (Sandbox Code Playgroud)
我其实想要:
"This is not the greatest song in the world this is just a tribute."
Run Code Online (Sandbox Code Playgroud)
但上面的代码实际上产生了:
"This is not the greatest song in the world" "this is just a tribute."
Run Code Online (Sandbox Code Playgroud)
所以,我尝试把%QUOTE(),%BQUOTE等.周围,&VAR1并%VAR2希望揭开报价,但我得到相同的结果.
唯一对我有用的是:
%LET TRIBUTE="%SUBSTR(&VAR1.,2,%LENGTH(&VAR1.)-2) %SUBSTR(&VAR2.,2,%LENGTH(&VAR2.)-2)";
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中创建一些像Excel查找功能一样的东西.基本上,我设定的值,宏变量var1,var2...我想根据找到自己的索引号ref表.但是我在数据步骤中收到以下消息.
NOTE: Variable A is uninitialized.
NOTE: Variable B is uninitialized.
NOTE: Variable NULL is uninitialized.
Run Code Online (Sandbox Code Playgroud)
当我打印变量&num1时&num2,我什么都没得到.这是我的代码.
data ref;
input index varname $;
datalines;
0 NULL
1 A
2 B
3 C
;
run;
%let var1=A;
%let var2=B;
%let var3=NULL;
data temp;
set ref;
if varname=&var1 then call symput('num1',trim(left(index)));
if varname=&var2 then call symput('num2',trim(left(index)));
if varname=&var3 then call symput('num3',trim(left(index)));
run;
%put &num1;
%put &num2;
%put &num3;
Run Code Online (Sandbox Code Playgroud)
我能得到正确的值&num1,&num2 …
我知道存在用于数据步骤DO循环的LEAVE语句以终止当前循环。但是,我找不到相应宏命令的文档。
我已经尝试过了,%LEAVE但是似乎没有定义。
%GOTO或以外,还有其他选择DATA _NULL_吗?以下代码从excel文件中读取手机账单并执行大量清理/报告.
%LET month = March;
..........
PROC IMPORT OUT = PHONE.marchmin
DATAFILE = "D:\Data\cellphone\MarchBill.xls"
DBMS = EXCEL REPLACE;
SHEET = "Calls$";
GETNAMES = YES;
MIXED = YES;
SCANTEXT = YES;
USEDATE = YES;
SCANTIME = YES;
RUN;
Run Code Online (Sandbox Code Playgroud)
为了让我的生活更轻松,我正在尝试使用宏变量来更新所有对March的引用.我下面的初步想法不起作用.
%LET month = March;
.......
PROC IMPORT OUT = PHONE.&monthmin
DATAFILE = "D:\Data\cellphone\&monthBill.xls"
DBMS = EXCEL REPLACE;
SHEET = "Calls$";
GETNAMES = YES;
MIXED = YES;
SCANTEXT = YES;
USEDATE = YES;
SCANTIME = YES;
RUN;
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
WARNING: Apparent symbolic reference MONTHMIN …Run Code Online (Sandbox Code Playgroud) 我需要使用单引号读取字符串,而不使用宏retrieve_context中的引号.
在调用宏时,用户可以使用单引号或不带引号来调用它,如下所示:
%retrieve_context('american%s choice', work.phone_conv, '01OCT2015'd, '12OCT2015'd)
%retrieve_context(american%s choice, work.phone_conv, '01OCT2015'd, '12OCT2015'd)
Run Code Online (Sandbox Code Playgroud)
如何在没有单引号的情况下读取宏中的第一个参数?
我试过%conv_quote = unquote(%str(&conv_quote))但它没用.
%str 应该将一个字符串作为一个参数传递给 sas 宏,即使它包含逗号,但如果 %str 的参数本身就是宏的结果,那么这显然不起作用?我明白了ERROR: More positional parameters found than defined.
这就是错误的含义
15 %macro outer_macro(left, right);
16 %put NOTE: outer_macro: left is &left;
17 %put NOTE: outer_macro: right is &right;
18 %mend;
19 %outer_macro(left, right);
NOTE: outer_macro: left is left
NOTE: outer_macro: right is right
20 %outer_macro(left, midle, right);
ERROR: More positional parameters found than defined.
Run Code Online (Sandbox Code Playgroud)
%str正常情况下是这样解决的。
21 %outer_macro(left, %str(midle, right));
NOTE: outer_macro: left is left
NOTE: outer_macro: right is midle, right
Run Code Online (Sandbox Code Playgroud)
可以用内部宏构造宏的参数
23 %macro blank_macro(left, …Run Code Online (Sandbox Code Playgroud)