标签: sas-macro

宏返回一个值

我创建了以下宏.Proc power返回pw_cout包含列的表Power.该data _null_步骤将列Power中的值分配pw_out给宏变量tpw.我希望宏返回值tpw,以便在主程序中,我可以在DATA步骤中调用它,如:

data test;
   set tmp;
   pw_tmp=ttest_power(meanA=a, stdA=s1, nA=n1, meanB=a2, stdB=s2, nB=n2);
run;
Run Code Online (Sandbox Code Playgroud)

这是宏的代码:

%macro ttest_power(meanA=, stdA=, nA=, meanB=, stdB=, nB=);


proc power; 
   twosamplemeans test=diff_satt 
   groupmeans = &meanA | &meanB 
   groupstddevs = &stdA | &stdB
   groupns = (&nA &nB)
   power = .;    
   ods output Output=pw_out;
run;

data _null_;
    set pw_out;
    call symput('tpw'=&power);
run;

&tpw
%mend ttest_power;
Run Code Online (Sandbox Code Playgroud)

sas sas-macro

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

是否可以循环遍历SAS数据集?

我有60个sas数据集,其中包含有关消费者个人特征的数据,例如 id, gender, age, amountSpent, ....每个数据集仅显示一个时间段的数据(data1为Jan,data2为Feb ...).由于尺寸和其他一些问题,我无法合并它们.

如何编写多循环来遍历每个数据集,进行一些操作并将估计值保存到临时文件中.

SAS没有for循环.我该怎么用do

sas sas-macro

10
推荐指数
3
解决办法
3万
查看次数

sas MACRO&符号

%let test = one;
%let one = two;

%put &test;
%put &&test;
%put &&&test;
%put &&&&test;
%put &&&&&test;
Run Code Online (Sandbox Code Playgroud)

好.我完全被这些&符号击败了.我不明白他们为什么在宏变量之前需要那么多的&符号.有没有什么技巧可以掌握&符号的用法?顺便说一下,五个结果相应的是什么?

sas ampersand sas-macro

9
推荐指数
1
解决办法
2904
查看次数

为什么我的宏变量不能解决?

我有一个宏变量,&myvar但是当我尝试将它放入数据步变量时它不会解析.为什么不呢,我该怎么做才能解决这个问题呢?

%let myvar=Hello, world;
data _null_;
  x='&myvar.';
  put x=;
run;
Run Code Online (Sandbox Code Playgroud)

sas sas-macro

8
推荐指数
1
解决办法
956
查看次数

使用SAS宏来管理Windows目录中的文件名列表

我试图修改下面的宏来接受一个宏参数作为dir命令的'location'参数.但是由于嵌套引号问题,我无法正确解析它.使用%str(%')不起作用,也不会出于某种原因引用函数.

当文件路径没有空格(例如C:\ temp\withnospace)时,宏将正常工作,因为不需要中间引号.但是我需要这个宏来处理带空格的文件路径(例如'C:\ temp\with space \').

请帮忙!

%macro get_filenames(location)
   filename pipedir pipe   "dir &location. /b " lrecl=32767;
   data filenames;
     infile pipedir truncover;
     input line $char1000.;
   run;
%mend;

%get_filenames(C:\temp\)              /* works */
%get_filenames('C:\temp\with space')  /* doesnt work */
Run Code Online (Sandbox Code Playgroud)

file-io pipe sas dir sas-macro

7
推荐指数
2
解决办法
4万
查看次数

"适用于SAS 9.3中的等效循环"

我正在搜索SAS 9.3宏语言中的for循环(如Python或R中)的等效内容.该DO循环似乎的是解决办法,但正是我以前不工作,因为我想要的.我在一个带有DO循环的数据步骤中创建了一种方法,但它不适用于宏语言.例如,在数据步骤中,此代码正在运行:

DATA _NULL_;
  DO i = 1,3,5,9;
    PUT i;
  END;
RUN;
Run Code Online (Sandbox Code Playgroud)

然后按预期的日志提示:

1
3
5
9
Run Code Online (Sandbox Code Playgroud)

当我尝试在宏中使用%DO循环时,我有一个错误.

%MACRO test();
  %DO i = 1,2,4,9 ;
    %PUT i = &i;
  %END;
%MEND;

%test();
Run Code Online (Sandbox Code Playgroud)

日志提示这些消息:

ERROR: Expected %TO not found in %DO statement.
ERROR: A dummy macro will be compiled
Run Code Online (Sandbox Code Playgroud)

我是SAS和stackoverflow的新手,所以我希望我的问题不是太愚蠢.在Python和R中执行此操作非常简单,因此必须有一种简单的方法在SAS中执行此操作.

谢谢你的帮助 - J.穆勒

sas sas-macro

7
推荐指数
1
解决办法
3358
查看次数

在SAS宏中改变宏变量的价值

我在宏中定义一个宏变量.然后,我将它喂入第二个宏.在macro2计数器内部将值更改为200.但是,当我检查宏2变量运行后我放入的宏变量内部时,它仍然显示0.我希望它存储值200?这可能吗?

 %macro macro1();
   %let variable1= 0;
   macro2(counter=&variable1)

   %put &variable1;
 %mend macro1;

 %macro1;
Run Code Online (Sandbox Code Playgroud)

sas sas-macro

7
推荐指数
1
解决办法
1746
查看次数

SAS:从另一个宏调用一个宏...宏定义的顺序

在我的代码中,我有几个宏.宏A是主宏.宏A然后调用宏B,宏B又调用宏C.

在SAS中,我是否必须按向后顺序定义它们?换句话说,我必须首先定义宏C,然后定义宏B,然后定义宏A吗?或者它是否重要,因为SAS在实际命中运行宏之前读取所有代码?就此而言,我可以发出命令来运行宏作为我的代码中的第一个语句,然后在命令下面定义宏吗?

谢谢!

sas sas-macro

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

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

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

使用SAS删除文本文件

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

sas sas-macro

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

标签 统计

sas ×10

sas-macro ×10

ampersand ×1

dir ×1

file-io ×1

pipe ×1