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

2024-04-11

下面的例子非常简单,可能可以用更简单的方式解决。不过,我有兴趣让它发挥作用。以下示例基于 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;

现在我想调用宏,但只想更新 obs(从输入语句)。我用:

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

run;

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


这里的问题是双重的。

首先,你不能使用CALL EXECUTE在这种情况下,因为它不会执行,直到after数据步骤已完成运行:所以任何事情都取决于&obs将无法获得更新的值。你必须使用dosubl https://support.sas.com/resources/papers/proceedings13/032-2013.pdf.

其次,你需要使用symget('obs'), not &obs,如果您想获取中间数据步骤的更新值。&obs将在编译数据步骤时解析,因此在执行期间无法更改;但symget(obs)指示数据步骤在执行期间查询符号表。

这是执行此操作的示例dosubl,与您的示例相比变化很小。请注意%global声明以确保obs我们可以在数据步骤中使用(还有其他更好的方法可以将其返回 - 即,将其包装在fcmp功能及使用run_macro- 但这最接近你的做法)。

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

%macro fun(var);
%global obs;
proc sql noprint;
        select count(distinct(&var.))
        into :obs
        from sashelp.cars;
quit;
%mend;

data work.test;
set mycontents;
if name ne "Type" then do;
      rc = dosubl(cats('%fun(',name,')'));
      new = symgetn('obs');
end;
else new = 5;
run;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Hadoop 与 SAS 的连接

    我想使用 SAS ACESS 9 3M2 接口将 SAS 与我的 Hive 连接 我的问题是 sas是否将hive立方体导入到sas环境中并在那里查询 或者 为了报告的目的 它再次访问 hive 以便它运行 MR 这将我的报告性能降低到 2
  • 拆分 SAS 数据集

    我有一个 SAS 数据集 如下所示 id dept 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9 B 10 B 11 B 12 B 13 B 每个观察代表一个人 我想将数据集分成 团队 数据集 每个数据集最多可以有 3
  • SAS 循环遍历宏变量列表

    首先 我是新人 所以如果这不是一个好问题 我深表歉意 我搜索过但没有找到类似的东西 我不确定我的方法是否正确 因此我们将不胜感激 我正在为一所有学期的学校创建一个数据集 例如 2017SP 是 2017 年春季 2017SU 是 2017
  • 将 CSV 中的所有列导入为字符?

    简单的问题 PROC IMPORT OUT braw address DATAFILE path address data csv DBMS csv REPLACE GETNAMES YES RUN 该语句将创建数据集列作为字符or数字取决
  • 解析宏变量名称中包含 %eval 的宏,SAS

    这是一个玩具示例 旨在帮助解决我遇到的更大问题 它本质上涉及在引用更大的宏变量名称时使用 eval 宏 我创建了一个宏变量 x 2 它使用循环 it 的值 从最终输出可以看出该变量已成功创建 但是我只能将其放入日志而不评估 it 1 这当使
  • 有效连接多个 sas 数据集

    我有超过 200k 个具有相同变量 n macro catDat name nbr call in new dataset data new set libin name run reorder names proc sql noprint
  • 将 SAS 数据集中的观测值读入数组

    这个问题与大型机上的 SAS 相关 尽管我相信在这种情况下没有什么区别 我有以下 SAS 数据集 Obs DATO T ALLOC T FRESP 1 19328 647 1804 2 19359 654 1797 3 19390 662
  • 当我将 SAS 数据集导出到 csv 时;它正在修剪字符中的所有前导空格

    当我将 SAS 数据集导出到 csv 时 它正在修剪字符中的所有前导空格 请帮助我保留 csv 输出中的所有前导空格 使用的语句是 Proc Export Data Globl Mth Sumry OutFile GMUPath 20 Rp
  • Proc sql:基于回顾期的新客户和继续客户

    我有以下数据 wei 01feb2018 car wei 02feb2018 car wei 02mar2019 bike carlin 01feb2018 car carlin 05feb2018 bike carlin 07mar201
  • XML 映射的 PATH 元素中的 POSITION() 函数在 XML 映射器中有效,但在 SAS 代码中无效

    我正在尝试将 xml 文件导入到 SAS Xml 文件是 Google 对地址请求的 地理响应 这是它的片段
  • 使用 COMMAw,d 转换数字

    我正在关注SAS 帮助页面 http support sas com documentation cdl en lrdict 64316 HTML default viewer htm a000200667 htm并试图获得与页面底部示例相
  • 如何在更新宏变量的数据步骤中调用宏并立即使用该值?

    下面的例子非常简单 可能可以用更简单的方式解决 不过 我有兴趣让它发挥作用 以下示例基于 sashelp library 的 cars dataset 首先 我有一个名为 fun 的宏 proc contents data sashelp
  • SAS SQL 传递

    我想知道在这段代码中 SAS SQL 传递中首先执行的是什么 Connect To OLEDB As MYDB DBConnect Catalog MYDB Create table MYDB extract as select put P
  • 如何在SAS中删除重复的记录\观察而不进行排序?

    我想知道是否有办法取消重复记录WITHOUT排序 有时候 我想保留原来的顺序 只想删除重复的记录 是否可以 顺便说一句 以下是我对不重复记录的了解 它最终会进行排序 1 proc sql create table yourdata nodu
  • SAS合并多个表

    我想知道合并多个表的最佳方法是什么 我在所有表中都有唯一的标识符 我应该在对表进行排序后一步加入所有表 还是应该逐步进行一一表合并 这有关系吗 您可以一步进行多次合并 然而 这并不是最安全的方法 如果您的数据可能存在缺陷 最好逐步执行此操作
  • 在从一个表中提取的循环内调用执行以执行宏

    我目前有以下情况 macro sqlloop event id lots of code mostly proc sql segments mend 生成一个输出表 名为export table2 我需要能够为另一个表 名为 vars 中的
  • 在新实例中打开 SAS 程序

    我正在尝试找出一种在单击时默认在增强编辑器的新实例中打开 SAS 程序的方法 问题是asked https stackoverflow com questions 4654876 open sas program in new window
  • 使用 Proc sql 和 Teradata 在 SAS 中编写高效查询

    编辑 这是一组更完整的代码 它准确地显示了下面的答案所发生的情况 libname output data files jeff let DateStart 01Jan2013 d let DateEnd 01Jun2013 d proc s
  • SAS 随机采样

    在 SAS 中 我创建了一个程序 该程序将从数据集中随机获取 50 个观测值 并计算观测值的平均值 data subset drop i samplesize samplesize 50 obsleft totobs do i 1 to s
  • SAS:将字符转换为数字变量 - 逗号作为小数分隔符

    我正在尝试使用INPUT函数 正如总是建议的那样 但 SAS 似乎在正确解释金额方面存在一些问题 例如 2 30 1 61 0 00 我最终得到了缺失值 也许是由于逗号是 SAS 的千位分隔符造成的 data temp old 1 61 n

随机推荐

  • 即使出现重复键错误,Pymongo 也会插入 id

    我正在开发一个 Flask 应用程序并使用 mongodb 在一个端点中 我获取了 csv 文件并将内容插入到 mongodb 中insert many 在插入之前 我创建一个唯一索引以防止 mongodb 上的重复 当没有重复时我可以到达
  • 将文本预测脚本 [Markov Chain] 从 javascript 转换为 python

    过去几天我一直在尝试转换这个js脚本 http blog javascriptroom com 2013 01 21 markov chains 到Python代码 到目前为止我的实现 主要是blindfull cp 一些小的修复 impo
  • Tensorflow 2:如何在 GPU 和 CPU 之间切换执行?

    In tensorflow1 X 独立keras2 X 中 我曾经使用以下代码片段在 GPU 上的训练和 CPU 上运行推理之间切换 由于某种原因 我的 RNN 模型速度要快得多 keras backend clear session de
  • Cosmosdb sql api 和 Cosmosdb cassandra api 之间的存储差异是什么

    大多数文章都提到 如果我们使用 Cosmos Db 并新创建我们的应用程序 我们应该使用 Cosmos db sql api 当您已经将应用程序与实际的 mongo 和 cassandra 集成并且我们希望快速迁移到 cosmosdb 并且
  • 不带端口的 SQL Server 命名实例远程连接

    我有一个 SQL Server Express 的命名实例 我想让它在网络上可见 我能够做到这一点 但其他机器只能连接到指定端口号 即使它是默认端口 例如 其他机器可以使用以下方式连接到我的机器 1433 是 SQL Server 的默认端
  • CSS:可以将 Webkit 滚动条“推”到内容中吗?

    通常滚动条的位置如下 content scrollbar 我基本上希望在 自定义 滚动条和可
  • 在 iOS 中以编程方式清空缓存

    有谁巧合地知道我如何清空我正在开发的iOS应用程序的缓存内存 在它进入后台 applicationDidEnterBackground 的那一刻 我已经调查了 NSCache 但我仍然无法理解如何检索缓存以基本上删除 释放它 你说的是这个吗
  • powerpoint vba将某些幻灯片导出为pdf

    我试图在调用此函数时将选定的幻灯片导出为 pdf 这段代码运行得非常好 但给我的是整个幻灯片的 PDF 格式 Sub Export to PDF ActivePresentation ExportAsFixedFormat ActivePr
  • 最小购物车金额(WooCommerce 中的特定产品除外)

    我只允许在我的网站上进行最低价值 15 欧元的订单 但希望对一种产品进行例外处理 如果有人知道如何在这方面帮助我 我将非常感激 最小订单值的编码如下 有人知道我如何调整它以通过产品 ID 排除一种产品吗 add action woocomm
  • 内存中的方法表示是什么?

    在思考一下 Java C 编程时 我想知道属于对象的方法如何在内存中表示 以及这一事实如何涉及多线程 是为内存中的每个对象单独实例化一个方法还是执行 同一类型的所有对象共享该方法的一个实例 如果是后者 执行线程如何知道哪个对象是 要使用的属
  • PHP 发送的 ZIP 存档已损坏

    我正在使用 php ZipArchive 即时创建 zip 文件并将其发送回用户 我将压缩文件暂时存储在文档根目录上方的文件夹中 然后将其与代码一起发回 header Content type application zip header
  • 何时使用 $ 何时不使用

    我使用以下变量选择了一个控件 var txt text1 现在 当我必须处理文本框上的事件时 我是否必须将其引用为 txt 或 txt 即可 txt keydown function or txt keydown function 有什么好
  • 为什么 File::isDirectory 作为 FileFilter 可以正常工作?

    Why 文件 是目录在下面的示例中 作为 FileFilter 工作正常吗 File files new File listFiles File isDirectory listFiles方法需要一个FileFilter作为参数 publi
  • Android ActionBar 重新创建选项菜单

    在Android中使用ActionBar时 如何刷新选项菜单 我尝试隐藏和显示该栏 并使用 getSupportActionBar 获取它的新实例 我正在尝试实现一个登录 注销按钮 该按钮将根据用户的状态动态更改 这是我的 onCreate
  • Google Big-query api 403-禁止异常

    当我使用 Big Query API 的 java 应用程序执行查询时 出现以下 JSON 异常 以下是我得到的异常 error errors domain global reason accessDenied message Access
  • 使用 regexp_substr 选择逗号之间的单词(不包括双引号)

    我试图从逗号分隔列表中返回字符串列表 但是 我仍然想返回字符串中出现在双引号之间的逗号 这是我目前的声明 SELECT regexp substr one two three four five six seven eight nine n
  • Jquery Draggables:删除元素会更改其他删除元素的位置

    当放置 放置元素 通过从一个 DIV 拖动到另一个 DIV 然后删除放置的 DIV 中的一个元素时 其中一些元素会更改位置 这是一个测试场景 http jsfiddle net TcYHW 8 http jsfiddle net TcYHW
  • 你已经从颠覆转向善变了吗?值得付出努力吗?

    我正在更好地了解 Mercurial 版本控制系统 并且正在考虑从 SVN 进行转换 有人已经转换了吗 对于您和您的团队来说 转变是否困难 您能否给出一些建议 是继续使用 SVN 还是选择 Mercurial 一旦开始 你就永远不想回去 优
  • Gnuplot脚本创建后消失

    我有一个 gnuplot 脚本 我的系统是ubuntu 14 04 当我在终端输入gnuplot myPlot 剧情将会消失 它不会保留在屏幕上 我在这个堆栈中看到了类似的question https stackoverflow com q
  • 如何在更新宏变量的数据步骤中调用宏并立即使用该值?

    下面的例子非常简单 可能可以用更简单的方式解决 不过 我有兴趣让它发挥作用 以下示例基于 sashelp library 的 cars dataset 首先 我有一个名为 fun 的宏 proc contents data sashelp