Ich versuche, eine Art Statistik über eine Tabelle zu erstellen, wie im folgenden Code:
\documentclass{standalone}
\usepackage{pgfplotstable}
\usepackage{booktabs, colortbl}
\usetikzlibrary{patterns}
\pgfplotstableset{col sep=semicolon, use comma, fixed, set thousands separator={},
every even row/.style={before row={\rowcolor[gray]{0.9}}},
every head row/.style={before row=\toprule, after row=\midrule},
every last row/.style={after row=\bottomrule}}
\newcommand{\sumoccurence}[3]{
% #1=table
% #2=column
% #3=value
\def\colsum{0}
\pgfplotstableforeachcolumnelement{#2}\of#1\as\cell{
\ifdim\cell pt=#3 pt
\pgfmathsetmacro\colsum{\colsum+1}
\fi
}
\colsum
}
\newcommand{\addstatisticcol}[5]{ %
% #1=table name to count
% #2=column name to count
% #3=table to add column
% #4=column mith marks
% #5=name of new column
% Sums for each column
%Should read from table #1 the column #2 and count for each mark in table #3 in column #4 and add a new column #5
\pgfplotstablecreatecol[
create col/assign/.code={%
\def\entry{}
%\xdef\entry{
%\xdef\entry{\sumoccurence{#1}{#2}{\thisrowno{#2}}
%\xdef\entry{\sumoccurence{#1}{#2}{2.0}}
\xdef\entry{\thisrow{#4}}
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
}
]{#5}#3
}
%
\begin{document}
\pgfplotstableread{
ID; Mark
1010121; 1.0
1010122; 1.0
1010123; 5.0
1010124; 5.0
1010125; 3.0
1010126; 4.0
1010127; 2.7
}\Marks
\pgfplotstableread{
Marks; Count
1.0; 2
1.3; 0
1.7; 0
2.0; 0
2.3; 0
2.7; 1
3.0; 1
3.3; 0
3.7; 0
4.0; 1
4.7; 0
5.0; 2
}\Statistic
%Original Table
\pgfplotstabletypeset[columns={ID, Mark},
columns/Mark/.style={numeric type, fixed zerofill, precision=1}]\Marks
% \hspace{1cm}
%Statistic how it should be
\pgfplotstabletypeset[
columns={Marks, Count},
columns/Marks/.style={numeric type, fixed zerofill, precision=1}]\Statistic
%Creating a new Table for the statistic
\pgfplotstablenew[create on use/Marks/.style={create col/set list={1.0,1.3,1.7,2.0,2.3,2.7,3.0,3.3,3.7,4.0,4.7,5.0}}, columns={Marks},]{12}\loadedtable
%Adding an automatically calculated column for count of each mark
\addstatisticcol{\Marks}{Mark}{\loadedtable}{Marks}{Count}
%Current result with just a copy of the first column
\pgfplotstabletypeset[
columns={Marks, Count},
columns/Marks/.style={numeric type, fixed zerofill, precision=1}]\loadedtable
\end{document}
Ich konnte einen Befehl erstellen, der alle Vorkommen (\sumoccurences) eines bestimmten Wertes berechnet. Aber wenn ich versuche, diesen Befehl in einem neuen Befehl wie \addstatisticcol zu verwenden, funktioniert es nicht. Ich erhalte viele Fehler wie
Undefinierte Steuersequenz. ...Noten}{Note}{\loadedtable}{Noten}{Anzahl}
und wie
Das Argument \pgfutil@in@@ hat ein zusätzliches }. ...Noten}{Note}{\loadedtable}{Noten}{Anzahl}
Hier ist die aktuelle Ausgabe:
Hoffentlich kann mir jemand einen Tipp geben.
Antwort1
Es war nur ein kleiner Fehler. Ich musste die \sumoccurences aus der \xdef entfernen und stattdessen das Makro dort verwenden.
\newcommand{\sumoccurence}[3]{
% #1=table
% #2=column
% #3=value
\def\colsum{0}
\pgfplotstableforeachcolumnelement{#2}\of#1\as\cell{
\ifdim\cell pt=#3 pt
\pgfmathsetmacro\colsum{\colsum+1}
\fi
}
%\colsum %removed this
}
\newcommand{\addstatisticcol}[5]{ %
% #1=table name to count
% #2=column name to count
% #3=table to add column
% #4=column mith marks
% #5=name of new column
% Sums for each column
%Should read from table #1 the column #2 and count for each mark in table #3 in column #4 and add a new column #5
\pgfplotstablecreatecol[
create col/assign/.code={%
\def\entry{}
\sumoccurence{#1}{#2}{\thisrow{#4}} %call it separately
\xdef\entry{\colsum} %use the created macro here
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
}
]{#5}#3
}
%