是否可以使用proc报告在一个excel工作表上堆叠多个表?例如,下面是我的代码的简化版本,我想使用第一个proc报告显示table1,然后跳过一行并在同一工作表的正下方显示table2.
ods listing close;
ods results off;
ods tagsets.excelxp file="c:\temp\char.xls" style=esgexcel ;
proc report data=table1 missing nowindows spacing=1;
column field1
field2
field3
;
define field1 / 'acct';
define field2 / format=mmddyy10. 'date';
define field3 / format=dollar22.2 'value';
run;
proc report data=table2 missing nowindows spacing=1;
column field1
field2
field3
;
define field1 / 'acct';
define field2 / format=mmddyy10. 'date';
define field3 / format=dollar22.2 'value';
run;
ods tagsets.excelxp close;
ods listing;
ods results;
Run Code Online (Sandbox Code Playgroud)
它不起作用.它将两个proc报告放在单独的工作表上.
所以,我正在为SAS编写一些代码,我意识到我必须将文件保存为filename.sas.我的教授提到我必须在我的电脑上使用记事本或其他文本编辑器.
如何在Mac上使用TextEdit来保存.sas文件?打开TextEdit,添加一些文本和保存会导致文件添加.rtf或.odt扩展名.
应该添加我的mac版本是10.5.8
我正在尝试导入一个.csv文件,但在路径中的bp&d中有(&)特殊字符,它显示错误为警告:未解析表观符号引用D. 我该怎么做.
proc import datafile ="\ pa-storage\bp&d\fot\PRODUCTS\Daa-SQN\ATA\Pss10_ALL_IN_ALL.csv"out = test dbms = csv replace; getnames =是; 跑;
我的情况 我希望一切顺利.我目前正在进行一项研究项目,处理大量不同库下的数据集.我创建了多个%宏定义,这些定义又生成了许多输出表并使用了许多输入表.这些表保存在不同的库下.
我的问题: 创建这些数据文件时,我的计算机速度变慢.清除每个宏程序会话中不需要的表会增加计算响应.
我的QUERY: 有没有办法生成每个宏程序使用PROC SQL或DATA步骤创建的输入和输出表列表?每个MACRO PROGRAM都有多个%宏,再次出于代码可读性的目的.使用"IN"或"OUT"语句对数据文件进行前缀/后缀无济于事.这将有助于我进行数据管理.
首先我有下表:
data dataset;
input id $ value;
datalines;
A 1
A 2
A 3
A 4
B 2
B 3
B 4
B 5
C 2
C 4
C 6
C 8
;
run;
Run Code Online (Sandbox Code Playgroud)
我想编写一个宏,以便用户可以通过给出id值来对数据进行子集化.我在宏内部执行sql,如下所示:
%macro sqlgrp(id=,);
proc sql;
create table output_&id. as
select *
from dataset
where id = '&id.'
;
quit;
%mend;
%sqlgrp(id=A); /*select id=A only*/
Run Code Online (Sandbox Code Playgroud)
我能够在WORK库中生成output_A表,但是它有零(0)个观察值.
为什么这不起作用?
我的SAS代码包含多个data步骤,并且proc sql- >彼此无关.其中一些可能会抛出错误.发生这种情况时,其余代码将终止.
我需要我的代码继续执行.即使抛出错误,只需将其放入日志中,ERROR : ... 但仍然继续执行.我怎样才能做到这一点 ?
我从这里尝试了一些选项
options noerrorabend;
但我找不到任何有用的东西
我想跳过以下宏中的两个数据集:
%macro bulk_ODI_extract(low_id,high_id);
%do loop_match=&low_id %to &high_id;
%ODI_commentary(&loop_match,2);
%end;
%mend bulk_ODI_extract;
%bulk_ODI_extract(749781,749787);
Run Code Online (Sandbox Code Playgroud)
因此,最终数据集应包括749781,749783,749785和749787,同时跳过749782,749784和749786.
我有以下数据,其中家庭中的人按年龄排序(从最老到最年轻):
data houses;
input HouseID PersonID Age;
datalines;
1 1 25
1 2 20
2 1 32
2 2 16
2 3 14
2 4 12
3 1 44
3 2 42
3 3 10
3 4 5
;
run;
Run Code Online (Sandbox Code Playgroud)
我想为每个家庭计算连续老年人之间的最大年龄差异.因此,该示例将连续为家庭1,2和3给出5(= 25-20),16(= 32-16)和32(= 42-10)的值.
我可以使用大量合并(即提取人1,与人2的提取物合并,等等)来做到这一点,但由于家庭中可能有多达20多人,我正在寻找更直接的方法.
我有一个if语句,检查全局变量是否为是/否
全局变量是前一个宏的输出
为什么当我在"Y"或"N"周围使用引号时它不起作用 - 我从未在任何其他编程语言中看到过这种情况.我总是不得不为字符变量使用引号
即这不起作用
%if &errorflag='Y' %then %do;
Run Code Online (Sandbox Code Playgroud)
但这有效:
%if &errorflag=Y %then %do;
Run Code Online (Sandbox Code Playgroud) 想要转换date = 2021/06/05 00:00:00为date = 05Jun2021. 我用这段代码来转换:
New date = datepart(date);
Run Code Online (Sandbox Code Playgroud)
但这没有用。我还使用子字符串来删除时间,但似乎这个方法有点冗长。