问题标签 [datastep]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sas - 如何用条件创建这个宏?
样本输入数据:
FirstName LastName Group Age LastVenue Position
Jack Smith ULDA 25 TheaterA 1
Jesse James GODL 37 TheaterB 12
Jane Doe ULDA 29 TheaterA 3
Izzy Gord IIPA 41 TheaterC 8
Ann Roswell GODL 30 TheaterB 16
Chelsea Jenk ULDA 19 TheaterA 11
我正在尝试创建:
%macro group_members(group=);
proc print data=sample;
var Position Age Group FirstName LastName;
where group=&group;
%mend group_members;
但是我想向它添加条件,所以如果没有输入任何内容,%group_members()
那么它将按照上面显示的变量顺序显示所有组。如果在这种情况下输入了一个无效组:%group_members(LOL)
那么我希望将一条注释发送到日志%put 'An invalid group was entered'
。因此不应该打印任何内容。我正在尝试在更大的数据集上创建一个非常相似的程序。
我感谢任何高级帮助!谢谢 :)
到目前为止,我已经尝试过:
%macro group_members(group=);
proc sql;
select count(*) into :ct
from sample
where group="&group"
quit;
proc print data=sample;
%if &group ^= %then %do;
where group="&group."; %end;
%if &ct = 0 %then %put An Invalid group was entered;
%else %do;
where group="&group.";
%end; run;
%mend group_members;
我从每个测试中得到错误..例如%group_members()
返回错误:
ERROR: More positional parameters found than defined
sas - SAS 数据步编程 - 解释数据集(obs=0)
如果我们在下面的(错误)示例中设置(obs = 0)数据集选项,您能否解释为什么不处理数据步骤语句?
我通常希望 work.wrong 和 work.right 具有相同的输出。
sas - SAS中的自动分组,最小化组内差异
所以我尝试建立自动分组。目标是选择具有最低方差的分组设置。
换句话说,我想为以下找到 x 和 y,x,y 是自然数,
使得(方差(Response
在Group1中),方差(Response
在Group2中),方差(Response
在Group3中))的总和最小化。
我的想法是我将有 2 个循环(嵌套)
然后,我将只选择提供 3 个组的方差(组内响应)之和中最小的分组设置。
loops - 插入可变数量的行
目前,我的宏正在运行以插入恒定数量的行:
我是否能够修改此宏或创建一个新宏来运行它,而不是 39 次,而是用另一个表中的变量替换循环数?
谢谢!
sas - Set multiple datasets with similar names in sas
Suppose I have a varying number of datasets in my work environment, but all of which start with a similar name: name_abc, name_efg, name_1ky, etc. The datasets have the same variables and characteristics, and I want to set them all into one dataset.
Is there a way I can do this in SAS without typing all the datasets? I need this to be flexible with the number of datasets available in work environment.
sas - 如何使用数据步骤而不是 SQL 从数据集列创建宏变量?
我们可以通过 SAS SQL 过程创建宏变量,使用语法
但我想知道数据步骤中是否有相同的方法。
我有一个数据集。
MA
我可以使用以下语句创建一个宏变量。
如何在数据步骤中做到这一点?
sas - SAS:检查文件是否存在后堆叠文件
我正在浏览一堆按日历年和其他变量划分的文件。我想做的是按财政年度对它们进行分区(基于记录中存在的日期变量)。例如,要创建 FY2010 文件,我需要堆叠 CY2009 和 CY2010 文件(我们将这些文件称为 file_2009 和 file_2010)和 FY2010 记录的子集。但是,其中一个或两个文件可能不存在。我想要做的是,如果其中一个文件不存在,那么只需使用另一个文件。如果两者都退出,则同时使用。否则,什么也不做。我想出的方法没有我想要的那么紧凑。关于这样做的最佳方式的任何想法?谢谢。
sql - 在两个重叠数据集中选择唯一组合
例如,在 SAS 中,我在数据集 A(左下方)中有 5 个 ID。有一个数据集 B,(可能包含一些 A 的 ID,右下方)。我需要在 A 和 B 上找到一个独特的组合(A 是主要结果数据集),性别相同,年龄范围在 5 以内,收入范围在 10000.Tt 内可能有很多 b.id 可以与 a.id 合并。但关键是,我只能使用一次 b.id。在这种情况下,101 与 106 合并,102 与 111,103 合并与 112,105 与 110 合并。抱歉,我很难描述我的问题。希望它足够清楚。谢谢!
结果
sas - sas - 按账户 ID 滞后?
不确定我是否需要为此使用延迟。但这就是我想做的。
这是我的数据...
这就是我想要结束的...
我的数据集按 acct 和 sort_order 排序。对于每个帐户,我想采用第一种类型(基于 sort_order)并将其复制到该帐户的每一行。例如,acct 111111 将“标准”作为它的第一个类型。我希望 acct 111111 的每个观察都具有“标准”作为它的类型。
我尝试在滞后的情况下执行以下操作,但效果不太好......
duplicates - by 语句在 sas 数据步骤中真正做了什么?
好的,这似乎是一件非常简单的事情,但我无法解释 sas datastep 中的“by statement”到底在做什么。我知道什么时候需要使用它,但我不确定它在做什么。
在下面的示例中,我了解 first.var 和 last.var 的虚拟 sas 列是什么,当它具有它的值时。by 语句是否在 var initial 和 metal 周围创建了这些虚拟列?那么sas是扫描整个数据集一次呢?
如果我 proc print dups 我希望这样: