标签: sas-macro

从工具栏提交SAS代码或宏

是否可以将SAS脚本或宏分配给Base SAS中的工具栏按钮?即你能'宏'或sas脚本吗?

sas toolbar dm display-manager sas-macro

5
推荐指数
1
解决办法
1083
查看次数

使用SAS删除文本文件

我正在寻找一段代码,最好是独立于操作系统和基于宏的代码,用于删除文本文件(或任何文件)

sas sas-macro

5
推荐指数
1
解决办法
8621
查看次数

在SAS中替换宏变量中的文本

我想将宏变量中某个句点的任何实例更改为下划线.我究竟做错了什么?

%let pow=0.1;
%let x = %sysfunc(tranwrd(&pow,".","_"));
%put x=&x;
Run Code Online (Sandbox Code Playgroud)

输出:

X = 0.1

sas sas-macro

5
推荐指数
1
解决办法
8811
查看次数

连接引用的宏变量

我只是想连接两个引用的宏变量,但似乎没有一个简单的方法.

说我们有:

%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)

但这很难看,而且可以很快地变得冗长.有没有更好的方法来做到这一点?

concatenation sas sas-macro

5
推荐指数
1
解决办法
1万
查看次数

在SAS中,执行没有分号的宏?

我在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 sas-macro

5
推荐指数
2
解决办法
1414
查看次数

在sas中的%let语句之后,宏变量未初始化

我想在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 …

sas sas-macro

5
推荐指数
1
解决办法
924
查看次数

SAS-脱离宏%DO循环

我知道存在用于数据步骤DO循环的LEAVE语句以终止当前循环。但是,我找不到相应宏命令的文档。

我已经尝试过了,%LEAVE但是似乎没有定义。

  1. SAS没有宏循环的break语句吗?
  2. 如果不是,除了使用%GOTO或以外,还有其他选择DATA _NULL_吗?

sas sas-macro

5
推荐指数
2
解决办法
4132
查看次数

SAS宏变量引用连接

以下代码从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)

sas sas-macro

4
推荐指数
1
解决办法
1700
查看次数

从SAS中的字符串中删除单引号

我需要使用单引号读取字符串,而不使用宏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))但它没用.

sas sas-macro

4
推荐指数
1
解决办法
5424
查看次数

为什么 `%str(%inner_macro())` 中的 %str 不起作用?

%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)

sas sas-macro

4
推荐指数
1
解决办法
353
查看次数

标签 统计

sas ×10

sas-macro ×10

concatenation ×1

display-manager ×1

dm ×1

toolbar ×1