小编Joe*_*Joe的帖子

SAS ODS 输出:获取 PDF 格式的直方图(仅!)

我正在运行以下代码来输出某个变量的直方图:

    ods results off;
    ods listing close;
    ods pdf file="&folder/temp.pdf";
    title ;
    * Histogram of betCount;
    proc univariate data=want;
          var BetCount;
          histogram;
    *label sex=' ' height='Height (cm)';
    run;
    ods pdf close;
    ods listing;
    ods results on;
Run Code Online (Sandbox Code Playgroud)

它确实会创建 PDF,但有很多额外的表格和输出。我只想看直方图,因为我被读入乳胶作为 \minipage 的一部分,其中有六个数字。我之前已经手动完成此操作,方法是截取所需区域的屏幕截图,粘贴到 Paint 中并转换为 PDF 或 PNG:我不想再走这条路了!对于 SAS 中的图形和绘图,一般如何做到这一点?

感谢您的任何帮助。

sas sas-ods

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

SAS间接宏处理

我在考试试卷上有一个问题,询问SAS日志中的内容

%let test=one;
%let one=two;
%let two=three;
%let three=last;

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

我很惊讶地发现,答案是: 2,因为我本来以为这将参考完全解析到最后.SAS也同意答案为两个.

任何人都可以解释一下SAS如何得出答案二,因为我读过的所有理论说明都表明宏处理器应该做到以下几点

  • scan1 &&&&& test - > &&&& test(即&&解析为&并告诉处理器继续从右向左扫描)
  • scan2 &&&& test - > &&& one
  • scan3 &&& one - > && two
  • scan4 && two - >&three
  • scan5&three - > last

sas sas-macro

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

SAS-将行中的多个变量转置为列

我正在尝试使用数组来完成以下任务。但是,我以前从未使用过,并且遇到了一些麻烦。

基本上,我想获取以下数据并为每个acct,seq1,seq2组合创建一行(观察):

acct  seq1 seq2  la      ln
9999    1   10   20.01   100
9999    1   10   19.05   1
9999    2   11   26.77   100
9999    2   11   24.86   1
8888    3   20   38.43   218
8888    3   20   37.53   1
Run Code Online (Sandbox Code Playgroud)

这就是我要结束的。注意,为了节省空间,我仅显示la1到la3和ln1到ln3。实际上将转到la7和ln7:

acct  seq1  seq2     la1     la2    la3  ln1    ln2 ln3
9999    1   10      20.01   19.05   .    100     1   .
9999    2   11      26.77   24.86   .    100     1   .
8888    3   20      38.43   37.53   .    218     1   .
Run Code Online (Sandbox Code Playgroud)

这是到目前为止我尝试过的代码。任何帮助将不胜感激:

data want;
set have; 
by …
Run Code Online (Sandbox Code Playgroud)

sas

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

SAS Do循环:在循环内使用循环变量来创建滞后变量

我想创建包含大量滞后的给定变量的滞后值的变量.我怎么能这样做?我尝试以下方法:

data out; 
set in;
do i = 1 to 50;
%let j = i;
lag_&j = Lag&j.(x);
end;
run;
Run Code Online (Sandbox Code Playgroud)

如何将循环变量i放入宏变量j或如何直接使用它来创建适当命名的变量和Lag函数?

sas sas-macro

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

SAS和INTNX格式化

我试图看一个变量是否属于日期的边界.我讨厌MMDDYY10中的DATE1.

我使用以下代码

DATA GIANT; 
  SET GIANT; 
  UPPER_BOUND= intnx('week', DATE1, 2);  
run;
Run Code Online (Sandbox Code Playgroud)

它让我回来了Num 8.

我想恢复它,MMDDYY10.以便我可以将它与我的其他日期进行比较.

两个问题:

  1. 如何将长度为8的NUMERIC转换为日期?
  2. 为什么intnx ...设计用于日期返回数字而不是相同格式的东西?

我试着像这样转换它:

DATA GIANT; 
  SET GIANT; 
  UP_DATE=INPUT(PUT(UPPER_BOUND, 8.), MMDDYY10.);
  FORMAT UP_DOS MMDDYY10.; 
run;
Run Code Online (Sandbox Code Playgroud)

但现在一切都是空的.

date sas

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

将数据从一行中的文本文件读入SAS

我试图弄清楚如何读取由逗号分隔的文本文件(300mb)中的数据,但数据在一行中.

数据如下所示:

A,B,C,d,E,F,G,H,I,J,K,L,M,FALSE,FALSE,真实,1,379,0,1,1,1,1,1,1,0 ,1,0,6,0,6,0,6,6,6,6,6,6,6,6,6,0,6,0,0,0,0,0,0,0

这里A到M的数据是变量名,rest是这些变量的数据.谁能帮我把这些数据读进SAS?

非常感谢!

sas

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

计算 0 值的数量

与这里类似,我可以计算缺失观察的数量:

data dataset;
  input a b c;
cards;
1 2 3
0 1 0
0 0 0
7 6 .
. 3 0
0 0 .
;
run;

proc means data=dataset NMISS N;
run;
Run Code Online (Sandbox Code Playgroud)

但我怎样才能计算观察值的数量呢0

sas

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

SAS:在where子句中将日期时间转换为日期

我在 sas 数据集中有一个日期时间 25.6 格式的列;我们将此列称为日期时间。我想在 where 子句中将其转换为 Date9 格式,并检查某个日期或日期变量。

我目前有以下代码:

proc sql;
Select rowid, name, dob, country
from db.testTable
where cast(datetime as date9.) eq '14sep2014'd
;
quit;
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时出现错误:

错误 22-322:语法错误,需要以下之一:!、!!、&、)、*、**、+、'、'、-、/、<、<=、<>、=、>、 >=、?、AND、BETWEEN、包含、EQ、EQT、GE、GET、GT、GTT、IN、IS、LE、LET、LIKE、LT、LTT、NE、NET、NOT、NOTIN、OR、^、^ =、|、||、~、~=。

错误 202-322:选项或参数无法识别,将被忽略。

如果使用以下命令,我会收到相同的错误消息

proc sql;
Select rowid, name, dob, country
from db.testTable
where cast(datetime as date9.) = '14sep2014'd
;
quit;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法在 SAS 中将a 转换datetime为格式?date9对此的任何帮助将不胜感激

sas

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

如何在更新宏变量并立即使用该值的数据步骤中调用宏?

以下示例非常简单,可以更容易地解决.但是,我有兴趣让它发挥作用.以下示例基于sashelp-library的cars-dataset.首先,我有一个名为fun的宏:

proc contents data = sashelp.cars out = mycontents;
run;

%macro fun(var);
proc sql noprint;
        select count(distinct(&var.))
        into :obs
        from sashelp.cars;
quit;
%mend;
Run Code Online (Sandbox Code Playgroud)

现在我想调用宏但只是更新obs(来自输入语句).我用:

data work.test;
set mycontents;
if name ne "Type" then do;
      call execute('%nrstr(%fun('||name||');');
      new = &obs;
end;
else new = 5;
Run Code Online (Sandbox Code Playgroud)

跑;

简而言之,这应该迭代mycontents的行.然后根据名称调用一个(多个)宏,更新obs.然后我可以简单地用obs填充新列new.但是,obs对所有名称保持相同的值,这是最后一个变量的值.

sas sas-macro

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

使用 R 从 ftp-server 下载 SAS 文件

我正在尝试从 ftp 服务器将一些文件下载到我的本地。我已成功使用以下方法从服务器移动 .txt 和 .csv 文件,而不是我需要的 .sas7bdat 文件。

protocol <- "sftp"
server <- "ServerName"
userpwd <- "User:Pass"
tsfrFilename <- "/filepath/file.sas7bdat" 
ouptFilename <- "out.sas7bdat"

# Run #
## Download Data
url <- paste0(protocol, "://", server, tsfrFilename)
data <- getURL(url = url, userpwd=userpwd)

## Create File
fconn <- file(ouptFilename)
writeLines(data, fconn)
close(fconn)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行 getURL 命令时,遇到以下错误:

Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : 
  embedded nul in string:
Run Code Online (Sandbox Code Playgroud)

有谁知道我可以从 ftp-server 将 sas7bdat 文件下载到本地的任何替代方法,或者是否有办法更改下面的代码以成功下载文件。谢谢!

ftp r download rcurl

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

标签 统计

sas ×9

sas-macro ×3

date ×1

download ×1

ftp ×1

r ×1

rcurl ×1

sas-ods ×1