我正在尝试创建包含值的数组。
proc sql noprint;
select count(*) into :dscnt from study;
select libname into :libname1 - :libname&dscnt from study;
quit;
Run Code Online (Sandbox Code Playgroud)
我认为语法是正确的,但我在 SAS Studio 中不断收到以下错误消息。
***NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
NOTE: Line generated by the macro variable "DSCNT".
79 libname 4
_
22
200
ERROR 22-322: Syntax error, expecting one of the following: ',', FROM, NOTRIM.
ERROR 200-322: The symbol is not recognized and will be ignored.***
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释我做错了什么吗?
谢谢
我试图通过proc import(SAS)将数字从csv文件导入sas数据集,但导入后我的所有前导零都消失了.
例如,
'0123456'导入后我只会得到'123456'
在test_1表中,该my_date字段是"DATE9".格式.
我想将它转换为纯数字格式(数字长度8),这是格式YYYYMMDD.
我还想在proc sql语句中理想地执行此操作.
这是我到目前为止所拥有的.
显然,我需要一些东西来操纵my_date字段.
rsubmit;
proc sql;
CREATE TABLE test_2 AS
SELECT
my_date
FROM
test_1
;
quit;
endrsubmit;
Run Code Online (Sandbox Code Playgroud)
仅供参考:我发现很难理解SAS中的各种方法.
为了澄清,该字段实际上应该是数字,而不是字符字段,也不是日期.
我使用Proc SQL的知识应该允许您绕过PRINT过程并自动打印输出,但由于某种原因输出没有显示.我的输出目标处于活动状态,我的日志没有错误.这是我的代码.
proc sql;
create table merged as
select *
from gram as g, nos as n
where g.cash = n.weight;
quit;
Run Code Online (Sandbox Code Playgroud)
日志只是说过程时间和行/变量计数.没有错误.但它没有出现在输出窗口中.我不确定是什么问题.
我需要对一个非常大的表的一小部分(例如 100 行)执行一个过程,只是为了测试语法和输出。我已经运行以下代码一段时间并且它仍在运行。我想知道它是否在做其他事情。或者说正确的做法是什么?
Proc sql inobs = 100;
select
Var1,
sum(Var2) as VarSum
from BigTable
Group by
Var1;
Quit;
Run Code Online (Sandbox Code Playgroud) 我在SAS中有一个名为"Flight"的数据集,我想标记一个特定列"Carrier"的所有行,其值与来自另一个名为"Airlines"的数据集匹配 ("Flght_carrier_code").
请提出一些方法.
样本数据集1 - "飞行"
date carrier flight tailnum air_time
01-01-2013 UA 1714 N24211 227
01-01-2013 AA 1141 N619AA 160
01-01-2013 B6 725 N804JB 183
01-01-2013 DL 461 N668DN 116
01-01-2013 UA 1696 N39463 150
01-01-2013 B6 507 N516JB 158
01-01-2013 EV 5708 N829AS 53
01-01-2013 B6 79 N593JB 140
01-01-2013 AA 301 N3ALAA 138
01-01-2013 B6 49 N793JB 149
01-01-2013 B6 71 N657JB 158
Run Code Online (Sandbox Code Playgroud)
样本数据集2 - "航空公司"
Flght_carrier_Code name
9E Endeavor …Run Code Online (Sandbox Code Playgroud) 我是SAS新手,有这个基本问题.我在表A中列出了纽约证券交易所的交易日期如下 -
trading_date
1st March 2012
2nd March 2012
3rd March 2012
4th March 2012
5th March 2012
6th March 2012
Run Code Online (Sandbox Code Playgroud)
我有另一张表B,其股价信息为 -
Date ID Ret Price
1st March 2012 1 … …
3rd March 2012 1 … …
4th March 2012 1 … …
5th March 2012 1 … …
6th March 2012 1 … …
1st March 2012 2 … …
3rd March 2012 2 … …
4th March 2012 2 … …
Run Code Online (Sandbox Code Playgroud)
...具有与价格和退货相关的数字数据.
现在我需要将NYSE Data表加入上表以获得下表 -
Date …Run Code Online (Sandbox Code Playgroud) 我有两个大表(每个约1GB),有许多不同的列,我想在sas中执行union.
目前,我使用proc sql和union all的以下方法.
SELECT A, B, '' as C from Table_1
UNION ALL
SELECT '' as A, B, C from Table_2
但是,这不是优选的,因为我在两个表中都有几十行,而且我不断添加它们.因此,我正在寻找一种方法来自动创建空白列,而无需明确地写出来.
我也尝试了以下查询:
select * from
(select * from Table_1),
(select * from Table_2)
然而,这看起来非常耗费计算并且需要永远运行.
有没有更好的方法来做到这一点?我也愿意使用data set而不是proc sql;
它可以是一个虚拟的问题,但我找不到例子.案例如下:
proc sql;
create table set1 as select catx('<', field1, field2 ....) as need_field
from table;
quit;
Run Code Online (Sandbox Code Playgroud)
有了这个代码字段,need_field会减少200的长度,所以它的可预测性如文档所示:
CATX函数向变量返回值,或在临时缓冲区中返回值.从CATX函数返回的值具有以下长度:
•WHERE子句和PROC SQL中最多200个字符
•除WHERE子句外,DATA步骤中最多32767个字符
•从宏处理器调用CATX时最多65534个字符
我不想使用数据步骤.你能帮我用宏处理器构建代码吗?(第三种方式).谢谢!
我无法解决一个问题.
我在一个SAS库中有未知数量的表.我想创建一个循环,通过它们和"UNION ALL"这些表.
表是预先检查的,它们具有相同的结构.这些表包括历史数据,因此它应该是Union all.我尝试了以下脚本,但它会搜索所有可能性,但不会执行UNION ALL.
我很感激任何想法来解决这个问题.
%macro union_tables(table_name, last_extract);
%do i=1 %to &last_extract.;
select * from data.&table_name&i
union all
%end;
select * from data.&table_name&i
%mend;
proc sql;
create table Full_history as
%union_tables(Table_,1216);
quit;
Run Code Online (Sandbox Code Playgroud)
先感谢您.