标签: datastep

如何使用SAS中的“数据”步骤对数据进行排序

我想在SAS数据步骤中对数据进行排序。我的确切意思是:proc sort的工作应该在数据步骤中完成。有什么解决办法吗?

sas datastep

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

在sas中设置多个具有相似名称的数据集

假设我的工作环境中有不同数量的数据集,但所有数据集都以相似的名称开头:name_abc、name_efg、name_1ky 等。这些数据集具有相同的变量和特征,我想将它们全部设置为一个数据集。

data bigdataset;
    set [all datasets that begin with name_];
run;
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在 SAS 中执行此操作,而无需输入所有数据集?我需要它能够灵活地适应工作环境中可用的数据集的数量。

sas datastep

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

将*most*变量设置为缺失,同时保留少数几个的内容

我有一个像这样的数据集(但有几百个变量):

id  q1  g7  q3  b2  zz  gl  az  tre
1   1   2   1   1   1   2   1   1
2   2   3   3   2   2   2   1   1
3   1   2   3   3   2   1   3   3
4   3   1   2   2   3   2   1   1
5   2   1   2   2   1   2   3   3
6   3   1   1   2   2   1   3   3
Run Code Online (Sandbox Code Playgroud)

我想保留ID,b2和tre,但是将其他所有内容都丢失了.在这个小的数据集中,我可以很容易地使用call missing (q1, g7, q3, zz, gl, az)- 但在一个包含更多变量的集合中,我实际上想说call missing (of _ALL_ *except …

sas datastep recode

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

SAS数据计算图中的节点/边

假设我有一个在名为的数据集中表示的有links,它有两个变量:from_idto_id.我想使用SAS Data Step做两件事:(1)计算节点数,(2)计算边数.

假设links数据集如下所示.

from_id    to_id
----------------
   1         2
   2         3
   3         1
   3         2
Run Code Online (Sandbox Code Playgroud)

在此示例中,有3个节点和4个边.(我们可以假设没有重复的边缘links).节点为1,2和3.边缘为1-> 2,2-> 3,3-> 1和3-> 2.

下面是一个SAS宏,它使用SAS Data Step和proc sql来计算节点和边缘.它工作得很好,但我希望使用SAS Data Step,这样可以(可能)更快地完成对节点和边缘的计数.

/* display number of nodes and edges for graph */
%macro graph_info(links);
data nodes;
    set &links;
    node_id = from_id;
    output;
    node_id = to_id;
    output;
    keep node_id;
run;

proc sql noprint;
    select count(distinct node_id) into :numNodes from nodes;
quit;
proc datasets …
Run Code Online (Sandbox Code Playgroud)

sas datastep

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

修改SAS数据集中的单个观测值

假设我有以下数据集:

data people;
    input name $ age;
    datalines;
Timothy 25
Mark 30
Matt 29
;
run;
Run Code Online (Sandbox Code Playgroud)

如何更改特定人的年龄?基本上,我想知道如何指定a name并告诉SAS更改该人(观察age值)的值。

sas datastep

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

解释SAS读取数据步骤的顺序(概念)

我需要了解SAS如何读取/执行数据步骤.当我查找有关SAS如何读取数据步骤的信息时,我似乎找到的是有关它如何为合并目的而读取的信息,这与常规数据步骤无关.让我们说,例如,我有这行代码:

data work.DATA;
  if amount_a= . then
     amount_a= 1;
  amount_b= 1;
  amount_a= . ;
  total = (amount_a + amount_b) + 0 ;
run;
Run Code Online (Sandbox Code Playgroud)

现在,鉴于此,"总"等于什么?我想知道,基本上,SAS将如何阅读这一步 - 它将首先读取/执行哪一行?它是从最后开始,然后继续前进吗?或者从顶部开始,然后继续前进?谢谢.

sas execution datastep

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

SAS datastep/SQL从具有相同ID的多个记录中选择最新记录

例如,我有一个数据集如下:

id Date
1  2000/01/01
1  2001/01/01
1  2002/01/01
2  2003/01/01
Run Code Online (Sandbox Code Playgroud)

通过datastep或sql,我如何获得id = 1和最新日期2002/01/01的记录?感谢您的帮助,并提前致谢.

sql sas proc-sql datastep

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

在数据步骤中表达"PUT all variables"以导出SAS数据

目标:使用数据步骤将整个SAS数据集导出到制表符分隔的文本文件.

问题:在我能找到的每个例子中,例如这个,必须在PUT语句后面的数据步骤中指定每个变量. 是不是只有一个简单的方法来询问"所有"变量?

我已经尝试过使用PUT _ALL_,但是在输出的每一行中都包含变量名,而不是只输出值.

text export sas datastep

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

通过数据步骤进行SAS变量连接

我正在寻找一种方法来创建一个包含数据集的某些值的字符串变量,同时通过数据步骤.

示例数据集work.test:

AddToStringYN    Value
     Y           One
     Y           Two
     N           Three
     Y           Four
     N           Five
Run Code Online (Sandbox Code Playgroud)

所以最后,变量看起来像:OneTwoFour(甚至更好的FourTwoOne).这看起来很简单,但我似乎无法找到办法.我也尝试使用像这样的宏变量:

%let stringvar=;
Data _null_;
  set work.test;
  if AddToStringYN = "Y" then do;
    call symput('stringvar',"&stringvar" || strip(value));
  end;
Run;
Run Code Online (Sandbox Code Playgroud)

但这给了:

GLOBAL STRINGVAR Four
Run Code Online (Sandbox Code Playgroud)

所以我只得到最后一个值.我知道这一定是因为我对这个宏设施有一些误解,但我不明白为什么变量中只有最后一个值.我认为这只是最后一次调用它的实际执行或其他东西,但是当我调整代码时:

%let stringvar=;
Data _null_;
  set work.test;
  if AddToStringYN = "Y" then do;
    call symput('stringvar'||strip(value),"&stringvar" || strip(value));
  end;
Run;
Run Code Online (Sandbox Code Playgroud)

然后我确实得到了所有这些:

GLOBAL STRINGVARONE  One
GLOBAL STRINGVARTWO  Two
GLOBAL STRINGVARFOUR  Four
Run Code Online (Sandbox Code Playgroud)

所以我的最后一个猜测是,通过数据步骤,'call symput ...'行实际上被添加到宏处理器中,其中"&stringvar"已经被替换,并且只有在最终语句之后它们全部被执行.
这是一个很好的假设还是有另一种解释?回到最初的问题:是否有一种简单的方法来实现这一目标(拥有所需的变量)?

variables sas datastep sas-macro

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

这在数据步骤中意味着什么?

在这个数据步骤中,我不明白做if last.y什么......你能告诉我吗?

data stop2;
    set stop2;
    by x y z t;

if last.y; /*WHAT DOES THIS DO ??*/

    if t ne 999999 then
        t=t+1;
    else do;
            t=0;
        z=z+1;
    end;
run;
Run Code Online (Sandbox Code Playgroud)

sas datastep

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

标签 统计

datastep ×10

sas ×10

execution ×1

export ×1

proc-sql ×1

recode ×1

sas-macro ×1

sql ×1

text ×1

variables ×1