SAS 宏 if then 条件将变量与数值进行比较

2023-12-03

我有一个包含多条路径的数据集,最后一个变量是人们遵循该路径的频率。

data path;
input path1 path2 path3 path4 path5 path6 frequency;
cards;
2 5 3 6 7 2 465
4 3 2 3 0 0 20394
2 1 3 6 5 0 309
1 3 2 6 5 3 302
2 2 5 4 7 7 6783
;
run;

我想计算每条路径上从前一站到后一站的频率,以计算它们各自的频率。因为有 7 站。会有49种组合,所以我写了一个宏代码。

%macro count(name,f,l);
data path;
    set me.path;
    retain &name;
    &name=0;
    %let i=0;
    %do %until (&i=6);
        %let i = %eval(&i+1);
        %if path&i=&f and path&i=&l %then &name=%eval(&name+frequency);
    %end;
run;
%mend;

%count(P2t5,2,5);

尽管代码本身没有问题,但无论我做什么,if 条件总是返回 false。例如,我期望在 do Until 循环的第一次迭代中,if 条件将为 true,但它返回 false。

有些东西告诉我这与path&i=&f,它是否没有将 path&i 识别为变量名或其他名称?

有人可以帮我解决这个问题吗?

Thanks!


您将宏代码与数据步骤代码混淆了。

你需要使用if not %if,其一。还,%eval也不会做你想做的事。这是一些经过一些改进的代码。

%macro count(name,f,l);
data path;
    set me.path;
    retain &name;
    &name=0;
    %do i=1 %to 6;
        if path&i=&f and path&i=&l then &name=&name+frequency;
    %end;
run;
%mend;

Macro %if用于比较文本本身 - 所以它比较path1 to 2,而不是值path1多变的。要获取变量的值,您必须使用常规if. %eval也使用文本,而不是变量值,因此它在这里没有任何用处。

实际上,您不需要为此使用宏循环。通常我们会使用数组。我确实假设你想要宏中的其他部分......

%macro count(name,f,l);
data path;
    set me.path;
    retain &name;
    array path[6];
    &name=0;
    do i=1 to 6;
        if path[i]=&f and path[i]=&l then &name=&name+frequency;
    end;
run;
%mend;

现在,我认为这仍然是 0:因为它不能同时等于 2 和 5。您可能需要解决这个逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SAS 宏 if then 条件将变量与数值进行比较 的相关文章

  • SAS数字到字符的转换?

    当我们将数字转换为字符时 我们应该使用如下的数字格式 data test prodID 001 result put prodID 1 run proc print run 我也尝试过使用字符格式 1 而且它也有效 data test pr
  • 将 CSV 中的所有列导入为字符?

    简单的问题 PROC IMPORT OUT braw address DATAFILE path address data csv DBMS csv REPLACE GETNAMES YES RUN 该语句将创建数据集列作为字符or数字取决
  • 删除SAS中所有观测值都不包含特定值的组

    我想删除其观察值中没有 NUM 14 的整个组 所以就像这样 原始数据 ID NUM 1 14 1 12 1 10 2 13 2 11 2 10 3 14 3 10 由于 ID 2 中都不包含 NUM 14 因此我删除了组 2 它应该看起来
  • 导出 SAS 数据集中的变量类型

    有没有简单的方法来捕获和导出 SAS 数据集中每个变量的类型 我正在将数据集导出为 CSV 格式以读入 R 并且read table如果后者还知道每个变量的数据类型 则后者的过程可以更有效地工作 PROC CONTENTS 有一个 OUT
  • 使用宏对数据集中的列按组求和

    我有一个数据集 如下所示 Month Cost Center Account Actual Annual Budget June 53410 Postage 13 234 June 53420 Postage 0 432 June 5343
  • 有效连接多个 sas 数据集

    我有超过 200k 个具有相同变量 n macro catDat name nbr call in new dataset data new set libin name run reorder names proc sql noprint
  • SAS列出并存储指定库下的所有表名到表中

    在库 测试 下 我有 5 个数据集 如何列出所有表名称 proc datasets lib work quit run 虽然我想进一步利用这些信息 就像表名一样 Thanks 使用 SQLdictionary tables view pro
  • 使用 COMMAw,d 转换数字

    我正在关注SAS 帮助页面 http support sas com documentation cdl en lrdict 64316 HTML default viewer htm a000200667 htm并试图获得与页面底部示例相
  • sas7bdat 变量名称中带有空格

    我收到了几个扩展名为 sas7bdat 的 SAS 数据集文件 我在 Windows 上使用 SAS 9 3 这些文件的创建者显然使用了不同的环境和 或软件 许多文件的 var 名称包含空格和其他无效字符 甚至运行一个proc conten
  • SAS:如何计算除某些字符变量之外的所有字符变量的频率

    我知道我可以使用类似以下内容来计算所有字符的频率 proc freq data sashelp class tables char run 但是 有没有办法排除一些变量呢 我想做类似的事情 proc freq data sashelp cl
  • SAS Do 循环:在循环内使用循环变量来创建滞后变量

    我想创建包含给定变量的滞后值的变量 以实现大量滞后 我怎么能这样做呢 我尝试以下操作 data out set in do i 1 to 50 let j i lag j Lag j x end run 如何获取循环变量i进入宏变量j或者如
  • SAS 全球日期比较

    我正在尝试进行日期比较 但没有得到正确的结果 有谁知道发生了什么事吗 macro ttt let check start 28APR2014 if check start d lt 25may2014 d then let true 1 e
  • 使用 SAS EG 通过代理从 API 下载 JSON 文件

    我正在尝试使用瑞士当局提供的 API 对公司网络内的地址进行地理编码 我的公司使用带有用户名和密码的代理服务器 我是 SAS EG 的新手 这是我迄今为止拥有的代码 我必须匿名一些内容才能被允许在此处发布 filename response
  • SAS合并多个表

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

    我正在尝试找出一种在单击时默认在增强编辑器的新实例中打开 SAS 程序的方法 问题是asked https stackoverflow com questions 4654876 open sas program in new window
  • 删除 SAS 中的表

    什么是最高效的SAS中删除表的方法 我有一个循环并删除大量表的程序 想知道 PROC SQL 之间是否存在性能差异 和过程数据集 一次删除一张桌子 或者如果还有其他方法吗 如果外包给操作系统是合理的 那可能是最快的 否则 我的不科学观察似乎
  • 停止 SAS 执行

    快速提问 是否有一种单行 或相当短的 方法可以从窗口环境中取消进一步 SAS 语句的执行 这些是methods http www2 sas com proceedings sugi31 063 31 pdf我知道 但它们会让人厌烦 尤其是在
  • SAS 随机采样

    在 SAS 中 我创建了一个程序 该程序将从数据集中随机获取 50 个观测值 并计算观测值的平均值 data subset drop i samplesize samplesize 50 obsleft totobs do i 1 to s
  • SAS 日期格式与 SQL Server 日期不兼容

    我对 SAS 相当陌生 最近我们将一些 SAS 数据集迁移到 SQL Server 表 但我们仍在使用 SAS 进行分析 当 SAS 尝试从 SQL Server 表中引入数据并让 SAS 检查 srv edt 日期是否在 dos beg
  • SAS:将字符转换为数字变量 - 逗号作为小数分隔符

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

随机推荐

  • 无法调用类型缺少调用签名、映射的表达式

    这段代码的工作原理 class A class B class C const classCFromAOrB element A B C gt new C const a A B new A const c C a map element
  • 最长递增子集 Prolog

    我想在 Prolog 中创建以查找输入列表的最长递增子集 例如 您输入 3 1 2 列表 输出为 1 2 subset 3 1 2 X X 1 2 我有显示此列表的所有子集的代码 subset subset X Y subset X Y s
  • mac osx 10.7 中的 g++

    有没有可能 g 编译器在 mac os x 10 7 中被删除了 我搜索后没有找到任何东西 但我确定我在10 7之前安装了它 Thanks 是的 更新删除了一些已安装的组件 其中包括 Java 和 OS X 管理的 GCC 安装 如果您之前
  • 使用 Node+Express 应用程序时出现“错误:自签名证书”

    出现以下错误 Error self signed certificate at TLSSocket
  • R 和 MATLAB 返回不同的特征向量

    我遗漏了一些明显的东西 但这里是 In R dput M structure c 2 77555756156289e 16 9 63770703841896e 16 0 9 63770703841896e 16 10 65431925623
  • PWA 在独立模式下以浏览器模式打开

    我们建造了一个Progressive Web App来自现有的 Angular 4 项目 一切正常 直到我们添加清单文件 当您从浏览器访问该应用程序时 它会提示您将其添加到主屏幕 但是添加后 当您单击主屏幕上的图标时 它会在Browser
  • 从java中的jtable单元格获取最新值

    有人可以举一个下面问题的例子吗 我有一个如下所示的 jtable plus minus total 10 0 10 0 2 8 0 3 5 如何获得最新总计 5 的值 以便我可以在公式中再次使用它 总计 总计 加减 另外 总计的值也会不断更
  • 强制应用程序仅运行单核?

    我在使用某些第三方 DLL 时遇到了这个奇怪的问题 每当我尝试使用某种方法时 第三方提供商都会引用一些出现内存异常的开源 DLL 当应用程序在单核计算机上运行时 不会出现此问题 但显然我们不能假设用户会遇到此问题 有没有办法强制应用程序 或
  • Google App Script GAS 表中的上次修改日期

    我正在尝试从我正在开发的 GAS 添加中获取工作表的最后修改日期 我当前的想法是获取驱动器修订列表 然后取最后一个值 对于仅获取最后一次修改来说 这似乎有点矫枉过正 我还担心如果修订次数超过此链接建议的 1000 这将会中断 https d
  • 如何在Python中与beautifulsoup并行抓取多个html页面?

    我正在使用 Django Web 框架用 Python 制作一个 Web 抓取应用程序 我需要使用 beautifulsoup 库抓取多个查询 这是我编写的代码的快照 for url in websites r requests get u
  • 重写规则不适用于 IIS 上的 CakePHP

    我一直在尝试使用根文件夹中的以下 web config 设置来让重写规则在 IIS 上为 CakePHP 工作
  • 在 AlaSQL/JS-XLSX Excel 导出上定义单元格格式

    是否可以在 AlaSQL 导出到 Excel 时定义单元格格式 我正在维护一个使用 AlaSQL 将网格数据导出到 Excel 的系统 问题是 Excel 数据未转换为 NUMBER DATE 值可以 但数字类型始终显示为常规 通过在 JS
  • 如何在 Swift 中使用 UnsafeMutablePointer

    如何使用UnsafeMutablePointer
  • 带命名参数的 PDO 语句 VS 问号参数

    我有一个用于数据库管理的类 我的一个子类 定义查询的子类 是这样定义的 只是一个示例 实际上为了测试目的而删除了许多其他函数 namespace Tests SQL Arguments SQL query class Query publi
  • 批处理文件中 msg * 命令的高级用法?

    编辑 对于这个问题 我已经开始悬赏 50 美元给给出最佳答案的人 嗨 我想知道是否有一种方法可以使用批处理文件来使弹出窗口出现msg hi 命令以及除了默认情况下的选择 取消和确定 之外的其他选择 我的意思是向弹出消息添加自定义按钮 例如
  • 查找某个类元素的 Dom 节点索引

    您好 我有一系列不同类别的标签 单击跨度时 我想返回跨度类的索引 所以不是跨度本身的索引 这是一个示例 html span class spantype1 text1 span span class spantype2 text2 span
  • 如何找到SQL Server运行端口?

    是的 我读过这个如何找到 MS SQL Server 2008 的端口 no luck 远程登录1433 返回连接失败 所以我必须指定其他端口 我尝试使用 网络统计 abn 但我在这个列表中没有看到 sqlservr exe 或类似的东西
  • ExecuteReader CommandText 属性尚未正确初始化

    首先 如果某些代码不正确 我们深表歉意 我对在 vb net 上使用 sql 还很陌生 我有以下代码 Imports MySql Data MySqlClient Imports System Data SqlClient Public C
  • 引导加载程序如何读取 DVD(cd)?

    我有一个用汇编语言编写的第一阶段引导加载程序 我需要它从 DVD 或 CD 加载第二阶段引导加载程序 我只找到了从软盘或硬盘读取的示例 那里使用的中断是13h 在中断描述中它说它可以读取软盘和硬盘 我尝试使用 13h 来读取 CD 就好像它
  • SAS 宏 if then 条件将变量与数值进行比较

    我有一个包含多条路径的数据集 最后一个变量是人们遵循该路径的频率 data path input path1 path2 path3 path4 path5 path6 frequency cards 2 5 3 6 7 2 465 4 3