`\csname` funktioniert folgendermaßen: Es wandelt alles bis `\endcsname` (nicht einschließlich) in einen Befehlsnamen um (mit Expansion wie bei `\edef` für das Argument). Wenn du also automatisiert einen Macronamen erzeugen möchtest, verwendest du:
\csname Matrix\Roman{foocount}\endcsname
Du möchtest allerdings, dass dieser Name gebildet wird, bevor `\newcommand` sein erstes Argument (nämlich den zu verwendenden Macronamen) liest. Also verwenden wir `\expandafter`:
\expandafter\newcommand\csname Matrix\Roman{foocount}\endcsname{definition}
Allerdings benötigen wir auch den Wert von `\Roman{foocount}` für die Definition, also verwenden wir statt `\newcommand` ein `\edef` und alles, was nicht expandiert werden soll soll, beschützen wir mit `\noexpand` oder `\unexpanded` (das Folgende verwendet nur `\noexpand`) -- außerdem müssen wir erneut darauf achten, dass die richtigen Macros betroffen sind und nicht `\csname` `\csname`, weshalb erneut abermals `\expandafter` verwendet wird. Schließlich verwenden wir noch einen Mechanismus für den loop, der nicht gruppiert (sodass der `\edef` überhaupt was macht): `\loop` aus dem LaTeX-Kernel reicht hier vollständig aus:
\documentclass[]{article}
\usepackage{pgfplotstable}
% Matrizen eingeben
\pgfplotstableread[]{
1 2 3 4
1 2 3 4
}\matrixI
\pgfplotstableread[]{
1 2
1 2
}\matrixII
\newcommand{\dimensionen}[1]
{%
\pgfplotstablegetcolsof{#1}%
\pgfmathtruncatemacro{\Spaltenzahl}{\pgfplotsretval}%
}
\newcounter{foocount}
\loop
\ifnum\value{foocount}<2
\stepcounter{foocount}
\expandafter\edef\csname Matrix\Roman{foocount}\endcsname
{%
Matrix\Roman{foocount}:
\noexpand\pgfplotstabletypeset[]
{\expandafter\noexpand\csname matrix\Roman{foocount}\endcsname}
mit
\noexpand\dimensionen
{\expandafter\noexpand\csname matrix\Roman{foocount}\endcsname}
\noexpand\pgfplotsretval\noexpand~Spalten.%
}
\repeat
\begin{document}
\MatrixI
\MatrixII
\end{document}