小编Joe*_*Joe的帖子

为什么直接运行时使用CALL EXECUTE运行宏错误?

我最近继承了一个看起来像这样的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 …

sas

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

如何读入R中的大型sas7bdat数据集?

我有一个60gb的sas7bdat文件我试图在R中进行子集.有没有人知道这样做的方法?

我有SAS,它需要大约14分钟才能完成,但是我想在R中做到这一点.

谢谢

r

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

在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中生成阵列的所有唯一排列

在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中是否有一个函数用于生成阵列的所有可能组合?

arrays sas

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

如何使用 SAS 中的计算从现有宏变量创建新的宏变量?

我想从已存在的其他宏变量创建一个新的宏变量。

我尝试了多种变体call symput%evalinput都无济于事......

我想d评估为 3 / 30 = .10。


*****  taken directly from the sas help files...  ;

%let a=1+2;
%let b=10*3;
%let c=5/3;
%let eval_a=%eval(&a);
%let eval_b=%eval(&b);
%let eval_c=%eval(&c);

%put &a is &eval_a;
%put &b is &eval_b;
%put &c is &eval_c; * not sure why this evaluates to 1, but I'm sure it's documented somewhere... ;


*****  This evaluates to 0...

%let d = %eval(%eval(&a) / %eval(&b)) ; 

%put &d ; …
Run Code Online (Sandbox Code Playgroud)

sas sas-macro

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

在 SAS 9.4 中关闭自动图形保存

在 SAS 9.3 中,我可以ODS HTML GPATH用来指定我想要保存图形的路径(如果我愿意的话)。在 9.4 中,默认情况下(即每次我打开 SAS 时),每当我制作图形(PROC SGPLOT例如,带有)时,它都会自动将绘图保存到保存 SAS 程序的位置。我试过转到工具 --> 选项 --> 首选项 --> 结果并取消选中 HTML 和 ODS 选项的每个组合,但无论如何我仍然会自动保存图形。我怎样才能关闭它?最好我还是有ODS输出SAS,但我不希望这些PNG(或其他)图像SAS之外自动保存到我的电脑。

编辑:更多信息,因为上述差异尚不清楚。

1)在 9.3 中,我不得不ODS GRAPHICS ON并指定ODS HTML GPATH,以便让 SAS 将我的绘图保存到 SAS 之外的我的计算机上(或者我是这么认为的)。如果我想要 SAS 内部的 ODS 图形,但不想在 SAS 之外保存图形,我可以说ODS GRAPHICS ON并跳过该ODS HTML GPATH语句。

2)当我打开 9.4 并且不做任何声明ODS(即保留默认设置),而是运行一个过程,如SGPLOT, I A)得到一个 html 图(显示在 SAS 的“结果”窗口中的 ODS 图)和我可以双击在 Windows 照片查看器中打开的图形,并且 …

sas sas-ods

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

在proc-sql sas中将datetime转换为date

我正在尝试将datetime22.3变量转换为ddmmmyy10.在proc sql中,这在输出列中给了我******.

如何在输出列中获取正确的值?

sas proc-sql

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

如何计算SAS Proc Sql中两个变量的串联/交叉的不同?

我知道在teradata或其他sql平台上你可以通过以下方式找到变量组合的计数:

从db.table中选择count(distinct x1 || x2)

这将给出x1,x2对的所有独特组合.

但是,此语法在proc sql中不起作用.

无论如何在proc sql中执行这样的计数?

谢谢.

sas proc-sql

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

SAS中多列的累积和

我一直在寻找解决方案,但我在SAS社区找不到任何类似的问题.所以这是我的问题:我有一个很大的SAS表:让我们说2个类和26个变量:

A B Var1 Var2 ... Var25 Var26
-----------------------------
1 1 10 20 ... 35 30
1 2 12 24 ... 32 45
1 3 20 23 ... 24 68
2 1 13 29 ... 22 57
2 2 32 43 ... 33 65
2 3 11 76 ... 32 45
...................
...................
Run Code Online (Sandbox Code Playgroud)

我需要通过Class = B来计算所有26个变量的累积和,这意味着对于A = 1,它将累积到B = 1,2,3; 对于A = 2,它将通过B = 1,2,3累积.结果表将如下:

A B Cum1 Cum2 ... Cum25 Cum26
-----------------------------
1 1 10 20 ... 35 30 …
Run Code Online (Sandbox Code Playgroud)

sas

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

冒号在输入语句中做了什么?

我在SAS网站上找到了以下代码,但在输入语句后无法理解":"的功能是什么.

data recessions;                                                                                                                        
   input startdate :date7. enddate :date7.;                                                                                             
   format startdate enddate date7.;                                                                                                     
   datalines;                                                                                                                           
01Mar01  01Nov01                                                                                                                        
01Dec07  01Jun09                                                                                                                        
;                                                                                                                                       
run;  
Run Code Online (Sandbox Code Playgroud)

sas

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

标签 统计

sas ×9

proc-sql ×2

sas-macro ×2

arrays ×1

r ×1

sas-ods ×1