loop based on a condition in another column

2 vues (au cours des 30 derniers jours)
Simon Jurgies
Simon Jurgies le 18 Mar 2021
Modifié(e) : Seth Furman le 18 Mar 2021
I'm working with a 694672x4 table containing the PermNo., date, CUSIP and stock price of a multitude of shares. The data is sorted such that the full time series of a stock is listed below the full time series of the following stock and so forth. (Pls see photo below). I am trying to calculate the daily returns of each stock individually, however I struggle with the way the data is structured. As you can see, column 3 contains the CUSIP which is an individual identifier to every stock in the sample. I am now trying to tell MatLab to calculate the daily returns (using (diff(log(X))))for all rows with the same identifier and start from scratch once the identifier changes. Unfortunately, I cannot provide any initial code as I don't know where to start...
Thank you in advance!
  4 commentaires
Jan
Jan le 18 Mar 2021
func = @(x) diff(log(x))
Walter Roberson
Walter Roberson le 18 Mar 2021
Probably you will need
func = @(x) {diff(log(x))}
That is because you will be processing vectors, and diff() of a vector is a vector (one shorter), but splitapply() requires that you return a scalar.

Connectez-vous pour commenter.

Réponse acceptée

Seth Furman
Seth Furman le 18 Mar 2021
Modifié(e) : Seth Furman le 18 Mar 2021
To add to Walter's answer, you might also consider groupsummary.
>> rng default
>> t = table([1;1;1;2;2;2;2],rand(7,1),'VariableNames',{'Group','Data'})
t =
7×2 table
Group Data
_____ _______
1 0.81472
1 0.90579
1 0.12699
2 0.91338
2 0.63236
2 0.09754
2 0.2785
>> groupsummary(t,'Group',@(x){diff(log(x))})
ans =
2×3 table
Group GroupCount fun1_Data
_____ __________ ____________
1 3 {2×1 double}
2 4 {3×1 double}

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by