我有一个看似非常简单的问题(可能是......),但我无法让它工作.
数据集"列表"中的变量"name"的长度为20.我希望有条件地将值选择为宏变量,但通常所需的值小于指定的长度.这会在最后留下尾随空白,这是我不能拥有的,因为它们会破坏宏变量的未来调用.
我已经尝试了修剪,压缩,btrim,左(修剪和其他解决方案,但似乎没有任何东西给我我想要的东西(这是'乔'没有空白).这看起来应该比它更容易...... .. 救命.
data list;
length id 8 name $20;
input id name $;
cards;
1 reallylongname
2 Joe
;
run;
proc sql;
select trim(name) into :nameselected
from list
where id=2;
run;
%put ....&nameselected....;
Run Code Online (Sandbox Code Playgroud) 我有一个SQL语句,我希望自动使用SAS EG(9.4).以下语句已在Teradata SQL Assistant中进行了测试并正常运行.
select * from TD.DATA where date='2015-06-01'
Run Code Online (Sandbox Code Playgroud)
现在我希望通过proc SQL传递来推送它,并将日期提供给SQL程序,就像这样....
proc sql;
connect to teradata as tera(user=&tera_user password="&tera_pwd" tdpid=terap);
create table MYDATA as
select * from connection to tera
(
select * from TD.DATA where date='2015-06-01'
);
disconnect from tera;
quit;
Run Code Online (Sandbox Code Playgroud)
上面的代码已经过测试,并产生与前一个SQL语句完全相同的输出.但是,我真正想要的是做这样的事情:
%let input_date='2015-06-01';
proc sql;
connect to teradata as tera(user=&tera_user password="&tera_pwd" tdpid=terap);
create table MYDATA as
select * from connection to tera
(
select * from TD.DATA where date=&input_date.
);
disconnect from tera;
quit;
Run Code Online (Sandbox Code Playgroud)
我尝试过不同的报价组合和不同的日期格式....我在这里缺少什么?谢谢.
我有一个包含 n 个变量的数据集(示例中为 3 个,但有所不同),我想找到这些变量彼此之间的相对频率。它们总是被命名为相同的,前缀后跟数字序列。
have <-
data.frame(
x1 = sample(1:10, 20, replace = TRUE),
x2 = sample(1:10, 20, replace = TRUE),
x3 = sample(1:10, 20, replace = TRUE)
)
want <-
have |>
mutate(
x1_prop = x1 / (x1 + x2 + x3),
x2_prop = x2 / (x1 + x2 + x3),
x3_prop = x3 / (x1 + x2 + x3))
Run Code Online (Sandbox Code Playgroud)
我认为 dplyr 中的解决方案可以使用mutate(across,但无法弄清楚语法......
want <-
have |>
mutate(across(everything()), . / rowSums(.)) # does not work
Run Code Online (Sandbox Code Playgroud) 我有一个过程转置问题。我拥有的代码并不能完全满足我的需求。
data have;
input name $ x y z;
cards;
jon 1 85 1300
jon 2 90 2000
jon 3 95 1800
hal 1 70 1500
hal 2 78 4000
hal 3 83 3000
;
run;
proc sort data=have;
by name;
run;
proc transpose data=have out=want;
by name;
run;
Run Code Online (Sandbox Code Playgroud)
我想最终得到一个如下所示的数据集:
name y1 y2 y3 z1 z2 z3
hal 70 78 83 1500 4000 3000
jon 85 90 95 1300 2000 1800
Run Code Online (Sandbox Code Playgroud)
这里最重要的是能够为每个名字获取一行。其次是能够使用 x 变量重命名其他变量(y1、y2、y3 等)。我知道第一部分可能很简单。想法?
谢谢。
我有一个类似下面的数据框.
bus_date <- as.Date(c('2017-04-03', '2017-04-04', '2017-04-06', '2017-04-11', '2017-04-13', '2017-04-17'))
sales <- c(100, 110, 120, 200, 300, 100)
daily_sales <- data.frame(bus_date, sales)
Run Code Online (Sandbox Code Playgroud)
这是每日销售表.
我想创建一个名为"Week_Start"的新变量,它是工作周的日期.我已经实现了各种解决方案,允许我记录一周的数字(1-52)但我需要实际的周开始日期.
如果(bus_date是星期一)返回(bus_date),则返回(bus_date之前的星期一)
所以我的结果数据框看起来像:
Week_Start <- as.Date(c('2017-04-03', '2017-04-03', '2017-04-03', '2017-04-10', '2017-04-10', '2017-04-17'))
daily_sales2 <- data.frame(bus_date, sales, Week_Start)
Run Code Online (Sandbox Code Playgroud)
我知道可能有一种简单的方法可以做到这一点,但不确定从哪里开始.谢谢.
我的数据看起来像这样
df <- data.frame(x = c(3, 5, 4, 4, 3, 2),
y = c(.9, .8, 1, 1.2, .5, .1))
Run Code Online (Sandbox Code Playgroud)
我试图将每个x值乘以y或1,具体取决于具有最小值的x值.
df$z <- df$x * min(df$y, 1)
Run Code Online (Sandbox Code Playgroud)
问题是它取整列的最小值,因此每x乘以0.1.
相反,我需要x乘以.9,.8,1,1,.5,.1 ......
我有一个简单的proc手段程序,我希望将输出限制为仅完成行.
data test_dat;
input group $ subgroup $ time variable1 variable2;
cards;
A xxxx 1 100 2.50
A xxxx 2 200 2.50
A xxxx 3 300 2.50
A xxxx 4 100 3.00
A zzzz 1 500 1.00
A zzzz 2 450 1.00
A zzzz 3 700 1.50
A zzzz 4 600 1.50
B yyyy 1 200 4.00
B yyyy 2 100 5.00
B yyyy 3 300 4.00
B yyyy 4 250 5.00
;
run;
proc means data=test_dat mean sum;
class …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的数据集:
data have;
input name $ class $ time score;
cards;
chewbacca wookie 1 97
chewbacca wookie 2 100
chewbacca wookie 3 95
saruman wizard 1 79
saruman wizard 2 85
saruman wizard 3 40
gandalf wizard 1 22
gandalf wizard 2 50
gandalf wizard 3 87
bieber canadian 1 50
bieber canadian 2 45
bieber canadian 3 10
;
run;
Run Code Online (Sandbox Code Playgroud)
我正在创建一个程序来完成两件事:1.打印每个不同类的数据2.为每个名称创建一个散点图x =时间y =得分.
执行下面的代码将说明我想要的输出:
data chewbacca saruman gandalf bieber;
set have;
if name='chewbacca' then output chewbacca;
else if name='saruman' …Run Code Online (Sandbox Code Playgroud)